rsScriptC_Lib.cpp revision 7349547db61d2d458b31c074b902d56d082e5d84
1e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams/* 2e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * Copyright (C) 2009 The Android Open Source Project 3e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * 4e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * you may not use this file except in compliance with the License. 6e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * You may obtain a copy of the License at 7e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * 8e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * 10e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * Unless required by applicable law or agreed to in writing, software 11e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * See the License for the specific language governing permissions and 14e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * limitations under the License. 15e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams */ 16e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 17e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams#include "rsContext.h" 18e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams#include "rsScriptC.h" 19e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams#include "rsMatrix.h" 20e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 21e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams#include "acc/acc.h" 229c4e4ca9ff75a7fe18544c83fcf782e46c9b6ac2Joe Onorato#include "utils/Timers.h" 23e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 2498e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy#include <time.h> 2598e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy 26e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Samsusing namespace android; 27e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Samsusing namespace android::renderscript; 28e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 29e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams#define GET_TLS() Context::ScriptTLSStruct * tls = \ 30e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams (Context::ScriptTLSStruct *)pthread_getspecific(Context::gThreadTLSKey); \ 31e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams Context * rsc = tls->mContext; \ 32e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams ScriptC * sc = (ScriptC *) tls->mScript 33e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 34a57c0a72c3b3babc2757d081ff8146ebaa2caf4cJason Sams 35e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams////////////////////////////////////////////////////////////////////////////// 36e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams// Math routines 37e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams////////////////////////////////////////////////////////////////////////////// 38e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 392275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guystatic float SC_sinf_fast(float x) 402275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy{ 412275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy const float A = 1.0f / (2.0f * M_PI); 422275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy const float B = -16.0f; 432275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy const float C = 8.0f; 44a57c0a72c3b3babc2757d081ff8146ebaa2caf4cJason Sams 452275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy // scale angle for easy argument reduction 462275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy x *= A; 47a57c0a72c3b3babc2757d081ff8146ebaa2caf4cJason Sams 482275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy if (fabsf(x) >= 0.5f) { 492275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy // argument reduction 502275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy x = x - ceilf(x + 0.5f) + 1.0f; 512275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy } 52a57c0a72c3b3babc2757d081ff8146ebaa2caf4cJason Sams 532275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy const float y = B * x * fabsf(x) + C * x; 542275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy return 0.2215f * (y * fabsf(y) - y) + y; 552275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy} 562275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy 572275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guystatic float SC_cosf_fast(float x) 582275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy{ 592275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy x += float(M_PI / 2); 602275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy 612275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy const float A = 1.0f / (2.0f * M_PI); 622275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy const float B = -16.0f; 632275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy const float C = 8.0f; 64a57c0a72c3b3babc2757d081ff8146ebaa2caf4cJason Sams 652275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy // scale angle for easy argument reduction 662275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy x *= A; 67a57c0a72c3b3babc2757d081ff8146ebaa2caf4cJason Sams 682275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy if (fabsf(x) >= 0.5f) { 692275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy // argument reduction 702275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy x = x - ceilf(x + 0.5f) + 1.0f; 712275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy } 72a57c0a72c3b3babc2757d081ff8146ebaa2caf4cJason Sams 732275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy const float y = B * x * fabsf(x) + C * x; 742275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy return 0.2215f * (y * fabsf(y) - y) + y; 752275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy} 762275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy 7722fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 78e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Samsstatic float SC_randf(float max) 79e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams{ 80e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams float r = (float)rand(); 81e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams return r / RAND_MAX * max; 82e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams} 83e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 8439dbc8067ef613b84475c20306d1b9be71d61c16Romain Guystatic float SC_randf2(float min, float max) 8539dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy{ 8639dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy float r = (float)rand(); 8739dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy return r / RAND_MAX * (max - min) + min; 8839dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy} 8939dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy 9022fa371bf64b8aae786acfe5d711af21afb13a93Jason Samsstatic int SC_randi(int max) 9122fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams{ 9222fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams return (int)SC_randf(max); 9322fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams} 9422fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 9522fa371bf64b8aae786acfe5d711af21afb13a93Jason Samsstatic int SC_randi2(int min, int max) 9622fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams{ 9722fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams return (int)SC_randf2(min, max); 9822fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams} 9922fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 100be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Samsstatic float SC_frac(float v) 101be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams{ 102be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams int i = (int)floor(v); 103be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams return fmin(v - i, 0x1.fffffep-1f); 104be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams} 105be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams 10698e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy////////////////////////////////////////////////////////////////////////////// 10798e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy// Time routines 10898e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy////////////////////////////////////////////////////////////////////////////// 10998e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy 1109c4e4ca9ff75a7fe18544c83fcf782e46c9b6ac2Joe Onoratostatic int32_t SC_second() 11198e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy{ 11298e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy GET_TLS(); 11398e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy 11498e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy time_t rawtime; 11598e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy time(&rawtime); 11698e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy 117519cdc9b7e63b21704e31dba909e6eeb788e43d3Romain Guy struct tm *timeinfo; 118519cdc9b7e63b21704e31dba909e6eeb788e43d3Romain Guy timeinfo = localtime(&rawtime); 119519cdc9b7e63b21704e31dba909e6eeb788e43d3Romain Guy return timeinfo->tm_sec; 12098e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy} 121e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 1229c4e4ca9ff75a7fe18544c83fcf782e46c9b6ac2Joe Onoratostatic int32_t SC_minute() 12398e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy{ 12498e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy GET_TLS(); 125e5ffb879ae535a899a486285a23bea05e912480fJason Sams 12698e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy time_t rawtime; 12798e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy time(&rawtime); 128e5ffb879ae535a899a486285a23bea05e912480fJason Sams 129519cdc9b7e63b21704e31dba909e6eeb788e43d3Romain Guy struct tm *timeinfo; 130519cdc9b7e63b21704e31dba909e6eeb788e43d3Romain Guy timeinfo = localtime(&rawtime); 131519cdc9b7e63b21704e31dba909e6eeb788e43d3Romain Guy return timeinfo->tm_min; 132e5ffb879ae535a899a486285a23bea05e912480fJason Sams} 13398e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy 1349c4e4ca9ff75a7fe18544c83fcf782e46c9b6ac2Joe Onoratostatic int32_t SC_hour() 13598e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy{ 13698e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy GET_TLS(); 137e5ffb879ae535a899a486285a23bea05e912480fJason Sams 13898e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy time_t rawtime; 13998e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy time(&rawtime); 140e5ffb879ae535a899a486285a23bea05e912480fJason Sams 141519cdc9b7e63b21704e31dba909e6eeb788e43d3Romain Guy struct tm *timeinfo; 142519cdc9b7e63b21704e31dba909e6eeb788e43d3Romain Guy timeinfo = localtime(&rawtime); 143519cdc9b7e63b21704e31dba909e6eeb788e43d3Romain Guy return timeinfo->tm_hour; 14439dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy} 14539dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy 1469c4e4ca9ff75a7fe18544c83fcf782e46c9b6ac2Joe Onoratostatic int32_t SC_day() 14739dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy{ 14839dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy GET_TLS(); 149e5ffb879ae535a899a486285a23bea05e912480fJason Sams 15039dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy time_t rawtime; 15139dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy time(&rawtime); 152e5ffb879ae535a899a486285a23bea05e912480fJason Sams 153519cdc9b7e63b21704e31dba909e6eeb788e43d3Romain Guy struct tm *timeinfo; 154519cdc9b7e63b21704e31dba909e6eeb788e43d3Romain Guy timeinfo = localtime(&rawtime); 155519cdc9b7e63b21704e31dba909e6eeb788e43d3Romain Guy return timeinfo->tm_mday; 156e5ffb879ae535a899a486285a23bea05e912480fJason Sams} 157e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 1589c4e4ca9ff75a7fe18544c83fcf782e46c9b6ac2Joe Onoratostatic int32_t SC_month() 15939dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy{ 16039dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy GET_TLS(); 161e5ffb879ae535a899a486285a23bea05e912480fJason Sams 16239dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy time_t rawtime; 16339dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy time(&rawtime); 164e5ffb879ae535a899a486285a23bea05e912480fJason Sams 165519cdc9b7e63b21704e31dba909e6eeb788e43d3Romain Guy struct tm *timeinfo; 166519cdc9b7e63b21704e31dba909e6eeb788e43d3Romain Guy timeinfo = localtime(&rawtime); 167519cdc9b7e63b21704e31dba909e6eeb788e43d3Romain Guy return timeinfo->tm_mon; 168e5ffb879ae535a899a486285a23bea05e912480fJason Sams} 16939dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy 1709c4e4ca9ff75a7fe18544c83fcf782e46c9b6ac2Joe Onoratostatic int32_t SC_year() 17139dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy{ 17239dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy GET_TLS(); 173e5ffb879ae535a899a486285a23bea05e912480fJason Sams 17439dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy time_t rawtime; 17539dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy time(&rawtime); 176e5ffb879ae535a899a486285a23bea05e912480fJason Sams 177519cdc9b7e63b21704e31dba909e6eeb788e43d3Romain Guy struct tm *timeinfo; 178519cdc9b7e63b21704e31dba909e6eeb788e43d3Romain Guy timeinfo = localtime(&rawtime); 179519cdc9b7e63b21704e31dba909e6eeb788e43d3Romain Guy return timeinfo->tm_year; 18039dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy} 18139dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy 182ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Samsstatic int64_t SC_uptimeMillis() 18322fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams{ 18422fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams return nanoseconds_to_milliseconds(systemTime(SYSTEM_TIME_MONOTONIC)); 18522fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams} 18622fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 1877349547db61d2d458b31c074b902d56d082e5d84Jason Samsstatic int64_t SC_uptimeNanos() 18822fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams{ 1897349547db61d2d458b31c074b902d56d082e5d84Jason Sams return systemTime(SYSTEM_TIME_MONOTONIC); 19022fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams} 19122fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 192ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Samsstatic float SC_getDt() 1939c4e4ca9ff75a7fe18544c83fcf782e46c9b6ac2Joe Onorato{ 1949c4e4ca9ff75a7fe18544c83fcf782e46c9b6ac2Joe Onorato GET_TLS(); 195ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams int64_t l = sc->mEnviroment.mLastDtTime; 196ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams sc->mEnviroment.mLastDtTime = systemTime(SYSTEM_TIME_MONOTONIC); 197ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams return ((float)(sc->mEnviroment.mLastDtTime - l)) / 1.0e9; 198e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams} 199e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 200e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 201e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams////////////////////////////////////////////////////////////////////////////// 202e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams// 203e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams////////////////////////////////////////////////////////////////////////////// 204e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 205be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Samsstatic uint32_t SC_allocGetDimX(RsAllocation va) 206e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams{ 207c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams GET_TLS(); 208be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams const Allocation *a = static_cast<const Allocation *>(va); 209be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams //LOGE("SC_allocGetDimX a=%p", a); 210be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams //LOGE(" type=%p", a->getType()); 211be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams return a->getType()->getDimX(); 212e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams} 213e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 214be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Samsstatic uint32_t SC_allocGetDimY(RsAllocation va) 21548b7edc13372dcb4537713e32beeb36bcd73a6d9Romain Guy{ 216be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams GET_TLS(); 217be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams const Allocation *a = static_cast<const Allocation *>(va); 218be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams return a->getType()->getDimY(); 21948b7edc13372dcb4537713e32beeb36bcd73a6d9Romain Guy} 22048b7edc13372dcb4537713e32beeb36bcd73a6d9Romain Guy 221be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Samsstatic uint32_t SC_allocGetDimZ(RsAllocation va) 22248b7edc13372dcb4537713e32beeb36bcd73a6d9Romain Guy{ 223be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams GET_TLS(); 224be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams const Allocation *a = static_cast<const Allocation *>(va); 225be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams return a->getType()->getDimZ(); 22648b7edc13372dcb4537713e32beeb36bcd73a6d9Romain Guy} 22748b7edc13372dcb4537713e32beeb36bcd73a6d9Romain Guy 228be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Samsstatic uint32_t SC_allocGetDimLOD(RsAllocation va) 22948b7edc13372dcb4537713e32beeb36bcd73a6d9Romain Guy{ 230be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams GET_TLS(); 231be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams const Allocation *a = static_cast<const Allocation *>(va); 232be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams return a->getType()->getDimLOD(); 23348b7edc13372dcb4537713e32beeb36bcd73a6d9Romain Guy} 23448b7edc13372dcb4537713e32beeb36bcd73a6d9Romain Guy 235be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Samsstatic uint32_t SC_allocGetDimFaces(RsAllocation va) 23648b7edc13372dcb4537713e32beeb36bcd73a6d9Romain Guy{ 237be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams GET_TLS(); 238be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams const Allocation *a = static_cast<const Allocation *>(va); 239be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams return a->getType()->getDimFaces(); 24048b7edc13372dcb4537713e32beeb36bcd73a6d9Romain Guy} 24148b7edc13372dcb4537713e32beeb36bcd73a6d9Romain Guy 2427bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Samsconst void * SC_getElementAtX(RsAllocation va, uint32_t x) 2437bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams{ 2447bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams const Allocation *a = static_cast<const Allocation *>(va); 2457bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams const Type *t = a->getType(); 2467bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams const uint8_t *p = (const uint8_t *)a->getPtr(); 2477bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams return &p[t->getElementSizeBytes() * x]; 2487bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams} 2497bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams 2507bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Samsconst void * SC_getElementAtXY(RsAllocation va, uint32_t x, uint32_t y) 2517bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams{ 2527bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams const Allocation *a = static_cast<const Allocation *>(va); 2537bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams const Type *t = a->getType(); 2547bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams const uint8_t *p = (const uint8_t *)a->getPtr(); 2557bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams return &p[t->getElementSizeBytes() * (x + y*t->getDimX())]; 2567bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams} 2577bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams 2587bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Samsconst void * SC_getElementAtXYZ(RsAllocation va, uint32_t x, uint32_t y, uint32_t z) 2597bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams{ 2607bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams const Allocation *a = static_cast<const Allocation *>(va); 2617bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams const Type *t = a->getType(); 2627bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams const uint8_t *p = (const uint8_t *)a->getPtr(); 2637bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams return &p[t->getElementSizeBytes() * (x + y*t->getDimX())]; 2647bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams} 265be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams 266e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 26722fa371bf64b8aae786acfe5d711af21afb13a93Jason Samsstatic void SC_debugF(const char *s, float f) { 26822fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams LOGE("%s %f, 0x%08x", s, f, *((int *) (&f))); 269c9d43db4d216b01b13aebfdb31d5615909591b33Jason Sams} 27022fa371bf64b8aae786acfe5d711af21afb13a93Jason Samsstatic void SC_debugFv2(const char *s, rsvF_2 fv) { 27122fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams float *f = (float *)&fv; 27222fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams LOGE("%s {%f, %f}", s, f[0], f[1]); 273370ed1525dc570381edd8c67d92eb45701d5f767Romain Guy} 27422fa371bf64b8aae786acfe5d711af21afb13a93Jason Samsstatic void SC_debugFv3(const char *s, rsvF_4 fv) { 27522fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams float *f = (float *)&fv; 27622fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams LOGE("%s {%f, %f, %f}", s, f[0], f[1], f[2]); 277c9d43db4d216b01b13aebfdb31d5615909591b33Jason Sams} 27822fa371bf64b8aae786acfe5d711af21afb13a93Jason Samsstatic void SC_debugFv4(const char *s, rsvF_4 fv) { 27922fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams float *f = (float *)&fv; 28022fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams LOGE("%s {%f, %f, %f, %f}", s, f[0], f[1], f[2], f[3]); 28122fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams} 28222fa371bf64b8aae786acfe5d711af21afb13a93Jason Samsstatic void SC_debugI32(const char *s, int32_t i) { 28322fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams LOGE("%s %i 0x%x", s, i, i); 284370ed1525dc570381edd8c67d92eb45701d5f767Romain Guy} 285ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Samsstatic void SC_debugU32(const char *s, uint32_t i) { 286ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams LOGE("%s %i 0x%x", s, i, i); 287ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams} 288370ed1525dc570381edd8c67d92eb45701d5f767Romain Guy 2897bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Samsstatic void SC_debugP(const char *s, const void *p) { 2907bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams LOGE("%s %p", s, p); 2917bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams} 2927bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams 293ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Samsstatic uint32_t SC_toClient2(int cmdID, void *data, int len) 294ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams{ 295ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams GET_TLS(); 296ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams //LOGE("SC_toClient %i %i %i", cmdID, len); 297ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams return rsc->sendMessageToClient(data, cmdID, len, false); 298ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams} 299ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams 300ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Samsstatic uint32_t SC_toClient(int cmdID) 3018c401effb0837155fc39ca0364f57a882d127d38Jason Sams{ 3028c401effb0837155fc39ca0364f57a882d127d38Jason Sams GET_TLS(); 303ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams //LOGE("SC_toClient %i", cmdID); 304ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams return rsc->sendMessageToClient(NULL, cmdID, 0, false); 3058c401effb0837155fc39ca0364f57a882d127d38Jason Sams} 3068c401effb0837155fc39ca0364f57a882d127d38Jason Sams 307ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Samsstatic uint32_t SC_toClientBlocking2(int cmdID, void *data, int len) 3083a27c952c013ad0a8e0c91bea76d895a07f7a56dJason Sams{ 3093a27c952c013ad0a8e0c91bea76d895a07f7a56dJason Sams GET_TLS(); 310ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams //LOGE("SC_toClientBlocking %i %i", cmdID, len); 311ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams return rsc->sendMessageToClient(data, cmdID, len, true); 312ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams} 313ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams 314ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Samsstatic uint32_t SC_toClientBlocking(int cmdID) 315ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams{ 316ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams GET_TLS(); 317ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams //LOGE("SC_toClientBlocking %i", cmdID); 318ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams return rsc->sendMessageToClient(NULL, cmdID, 0, true); 3193a27c952c013ad0a8e0c91bea76d895a07f7a56dJason Sams} 3203a27c952c013ad0a8e0c91bea76d895a07f7a56dJason Sams 321be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Samsint SC_divsi3(int a, int b) 322be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams{ 323be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams return a / b; 324be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams} 3253a27c952c013ad0a8e0c91bea76d895a07f7a56dJason Sams 326ce92d4baf7a5bce097228fdd4498601764cd4014Jason Samsint SC_getAllocation(const void *ptr) 327ce92d4baf7a5bce097228fdd4498601764cd4014Jason Sams{ 328ce92d4baf7a5bce097228fdd4498601764cd4014Jason Sams GET_TLS(); 329ce92d4baf7a5bce097228fdd4498601764cd4014Jason Sams const Allocation *alloc = sc->ptrToAllocation(ptr); 330ce92d4baf7a5bce097228fdd4498601764cd4014Jason Sams return (int)alloc; 331ce92d4baf7a5bce097228fdd4498601764cd4014Jason Sams} 332ce92d4baf7a5bce097228fdd4498601764cd4014Jason Sams 333ce92d4baf7a5bce097228fdd4498601764cd4014Jason Sams 334ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Samsvoid SC_ForEach(RsScript vs, 335ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Sams RsAllocation vin, 336ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Sams RsAllocation vout, 337ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Sams const void *usr) 338c61346b91434307c5003029017b54ce9c49112beJason Sams{ 339c61346b91434307c5003029017b54ce9c49112beJason Sams GET_TLS(); 340ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Sams const Allocation *ain = static_cast<const Allocation *>(vin); 341c61346b91434307c5003029017b54ce9c49112beJason Sams Allocation *aout = static_cast<Allocation *>(vout); 342c61346b91434307c5003029017b54ce9c49112beJason Sams Script *s = static_cast<Script *>(vs); 343ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Sams s->runForEach(rsc, ain, aout, usr); 344c61346b91434307c5003029017b54ce9c49112beJason Sams} 345c61346b91434307c5003029017b54ce9c49112beJason Sams 346ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Samsvoid SC_ForEach2(RsScript vs, 347ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Sams RsAllocation vin, 348ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Sams RsAllocation vout, 349ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Sams const void *usr, 350ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Sams const RsScriptCall *call) 351c61346b91434307c5003029017b54ce9c49112beJason Sams{ 352c61346b91434307c5003029017b54ce9c49112beJason Sams GET_TLS(); 353ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Sams const Allocation *ain = static_cast<const Allocation *>(vin); 354c61346b91434307c5003029017b54ce9c49112beJason Sams Allocation *aout = static_cast<Allocation *>(vout); 355c61346b91434307c5003029017b54ce9c49112beJason Sams Script *s = static_cast<Script *>(vs); 356ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Sams s->runForEach(rsc, ain, aout, usr, call); 357c61346b91434307c5003029017b54ce9c49112beJason Sams} 358c61346b91434307c5003029017b54ce9c49112beJason Sams 359e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams////////////////////////////////////////////////////////////////////////////// 360e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams// Class implementation 361e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams////////////////////////////////////////////////////////////////////////////// 362e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 363be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// llvm name mangling ref 364be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// <builtin-type> ::= v # void 365be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= b # bool 366be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= c # char 367be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= a # signed char 368be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= h # unsigned char 369be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= s # short 370be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= t # unsigned short 371be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= i # int 372be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= j # unsigned int 373be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= l # long 374be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= m # unsigned long 375be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= x # long long, __int64 376be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= y # unsigned long long, __int64 377be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= f # float 378be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= d # double 379be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams 380aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic ScriptCState::SymbolTable_t gSyms[] = { 381be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams { "__divsi3", (void *)&SC_divsi3 }, 382be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams 38322fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams // allocation 384ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams { "_Z19rsAllocationGetDimX13rs_allocation", (void *)&SC_allocGetDimX }, 385ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams { "_Z19rsAllocationGetDimY13rs_allocation", (void *)&SC_allocGetDimY }, 386ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams { "_Z19rsAllocationGetDimZ13rs_allocation", (void *)&SC_allocGetDimZ }, 387ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams { "_Z21rsAllocationGetDimLOD13rs_allocation", (void *)&SC_allocGetDimLOD }, 388ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams { "_Z23rsAllocationGetDimFaces13rs_allocation", (void *)&SC_allocGetDimFaces }, 389ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams { "_Z15rsGetAllocationPKv", (void *)&SC_getAllocation }, 39022fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 3917bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams { "_Z14rsGetElementAt13rs_allocationj", (void *)&SC_getElementAtX }, 3927bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams { "_Z14rsGetElementAt13rs_allocationjj", (void *)&SC_getElementAtXY }, 3937bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams { "_Z14rsGetElementAt13rs_allocationjjj", (void *)&SC_getElementAtXYZ }, 3947bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams 39522fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams // Debug 39622fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams { "_Z7rsDebugPKcf", (void *)&SC_debugF }, 39722fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams { "_Z7rsDebugPKcDv2_f", (void *)&SC_debugFv2 }, 39822fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams { "_Z7rsDebugPKcDv3_f", (void *)&SC_debugFv3 }, 39922fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams { "_Z7rsDebugPKcDv4_f", (void *)&SC_debugFv4 }, 40022fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams { "_Z7rsDebugPKci", (void *)&SC_debugI32 }, 401ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams { "_Z7rsDebugPKcj", (void *)&SC_debugU32 }, 4027bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams { "_Z7rsDebugPKcPKv", (void *)&SC_debugP }, 40322fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 40422fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams // RS Math 40522fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams { "_Z6rsRandi", (void *)&SC_randi }, 40622fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams { "_Z6rsRandii", (void *)&SC_randi2 }, 40722fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams { "_Z6rsRandf", (void *)&SC_randf }, 40822fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams { "_Z6rsRandff", (void *)&SC_randf2 }, 40922fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams { "_Z6rsFracf", (void *)&SC_frac }, 41022fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 41122fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams // time 4127349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z8rsSecondv", (void *)&SC_second }, 4137349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z8rsMinutev", (void *)&SC_minute }, 4147349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z6rsHourv", (void *)&SC_hour }, 4157349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z5rsDayv", (void *)&SC_day }, 4167349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z7rsMonthv", (void *)&SC_month }, 4177349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z6rsYearv", (void *)&SC_year }, 4187349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z14rsUptimeMillisv", (void*)&SC_uptimeMillis }, 4197349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z13rsUptimeNanosv", (void*)&SC_uptimeNanos }, 4207349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z7rsGetDtv", (void*)&SC_getDt }, 421ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams 422ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams { "_Z14rsSendToClienti", (void *)&SC_toClient }, 423ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams { "_Z14rsSendToClientiPKvj", (void *)&SC_toClient2 }, 424ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams { "_Z22rsSendToClientBlockingi", (void *)&SC_toClientBlocking }, 425ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams { "_Z22rsSendToClientBlockingiPKvj", (void *)&SC_toClientBlocking2 }, 42622fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 427ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Sams { "_Z9rsForEach9rs_script13rs_allocationS0_PKv", (void *)&SC_ForEach }, 428ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Sams //{ "_Z9rsForEach9rs_script13rs_allocationS0_PKv", (void *)&SC_ForEach2 }, 42922fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 43022fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams//////////////////////////////////////////////////////////////////// 43122fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 432be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams //{ "sinf_fast", (void *)&SC_sinf_fast }, 433be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams //{ "cosf_fast", (void *)&SC_cosf_fast }, 434e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 435be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams { NULL, NULL } 436e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams}; 437e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 438e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Samsconst ScriptCState::SymbolTable_t * ScriptCState::lookupSymbol(const char *sym) 439e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams{ 440e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams ScriptCState::SymbolTable_t *syms = gSyms; 441e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 442e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams while (syms->mPtr) { 443e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams if (!strcmp(syms->mName, sym)) { 444e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams return syms; 445e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams } 446e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams syms++; 447e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams } 448e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams return NULL; 449e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams} 450e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 451