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 <cutils/compiler.h> 180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsContext.h" 200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsScriptC.h" 210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsMatrix4x4.h" 220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsMatrix3x3.h" 230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsMatrix2x2.h" 240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsdCore.h" 260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsdRuntime.h" 270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesusing namespace android; 300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesusing namespace android::renderscript; 310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 32048436b8e1b9c5bdcdc0e0d552b147bbc6e2d7bfStephen Hinesstatic float SC_tgamma(float v) { 33048436b8e1b9c5bdcdc0e0d552b147bbc6e2d7bfStephen Hines return float(tgamma((double)v)); 34048436b8e1b9c5bdcdc0e0d552b147bbc6e2d7bfStephen Hines} 350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic float SC_exp10(float v) { 370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return pow(10.f, v); 380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 4022b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesstatic float SC_fract(float v, float *iptr) { 410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int i = (int)floor(v); 4222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines iptr[0] = (float)i; 430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return fmin(v - i, 0x1.fffffep-1f); 440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic float SC_log2(float v) { 470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return log10(v) / log10(2.f); 480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#if 0 510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic float SC_pown(float v, int p) { 520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return powf(v, (float)p); 530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic float SC_powr(float v, float p) { 560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return powf(v, p); 570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#endif 590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesfloat SC_rootn(float v, int r) { 610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return pow(v, 1.f / r); 620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesfloat SC_rsqrt(float v) { 650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return 1.f / sqrtf(v); 660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesfloat SC_sincos(float v, float *cosptr) { 690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *cosptr = cosf(v); 700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return sinf(v); 710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines////////////////////////////////////////////////////////////////////////////// 740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// Integer 750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines////////////////////////////////////////////////////////////////////////////// 760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic uint32_t SC_abs_i32(int32_t v) {return abs(v);} 790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic uint16_t SC_abs_i16(int16_t v) {return (uint16_t)abs(v);} 800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic uint8_t SC_abs_i8(int8_t v) {return (uint8_t)abs(v);} 810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic uint32_t SC_clz_u32(uint32_t v) {return __builtin_clz(v);} 830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic uint16_t SC_clz_u16(uint16_t v) {return (uint16_t)__builtin_clz(v);} 840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic uint8_t SC_clz_u8(uint8_t v) {return (uint8_t)__builtin_clz(v);} 850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic int32_t SC_clz_i32(int32_t v) {return (int32_t)__builtin_clz((uint32_t)v);} 860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic int16_t SC_clz_i16(int16_t v) {return (int16_t)__builtin_clz(v);} 870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic int8_t SC_clz_i8(int8_t v) {return (int8_t)__builtin_clz(v);} 880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic uint32_t SC_max_u32(uint32_t v, uint32_t v2) {return rsMax(v, v2);} 900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic uint16_t SC_max_u16(uint16_t v, uint16_t v2) {return rsMax(v, v2);} 910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic uint8_t SC_max_u8(uint8_t v, uint8_t v2) {return rsMax(v, v2);} 920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic int32_t SC_max_i32(int32_t v, int32_t v2) {return rsMax(v, v2);} 930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic int16_t SC_max_i16(int16_t v, int16_t v2) {return rsMax(v, v2);} 940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic int8_t SC_max_i8(int8_t v, int8_t v2) {return rsMax(v, v2);} 950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic uint32_t SC_min_u32(uint32_t v, uint32_t v2) {return rsMin(v, v2);} 970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic uint16_t SC_min_u16(uint16_t v, uint16_t v2) {return rsMin(v, v2);} 980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic uint8_t SC_min_u8(uint8_t v, uint8_t v2) {return rsMin(v, v2);} 990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic int32_t SC_min_i32(int32_t v, int32_t v2) {return rsMin(v, v2);} 1000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic int16_t SC_min_i16(int16_t v, int16_t v2) {return rsMin(v, v2);} 1010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic int8_t SC_min_i8(int8_t v, int8_t v2) {return rsMin(v, v2);} 1020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines////////////////////////////////////////////////////////////////////////////// 1040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// Float util 1050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines////////////////////////////////////////////////////////////////////////////// 1060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic float SC_clamp_f32(float amount, float low, float high) { 1080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return amount < low ? low : (amount > high ? high : amount); 1090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic float SC_max_f32(float v, float v2) { 1120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return rsMax(v, v2); 1130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic float SC_min_f32(float v, float v2) { 1160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return rsMin(v, v2); 1170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic float SC_step_f32(float edge, float v) { 1200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (v < edge) return 0.f; 1210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return 1.f; 1220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic float SC_sign_f32(float value) { 1250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (value > 0) return 1.f; 1260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (value < 0) return -1.f; 1270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return value; 1280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixLoadIdentity_4x4(Matrix4x4 *m) { 1310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->loadIdentity(); 1320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixLoadIdentity_3x3(Matrix3x3 *m) { 1340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->loadIdentity(); 1350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixLoadIdentity_2x2(Matrix2x2 *m) { 1370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->loadIdentity(); 1380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixLoad_4x4_f(Matrix4x4 *m, const float *f) { 1410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->load(f); 1420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixLoad_3x3_f(Matrix3x3 *m, const float *f) { 1440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->load(f); 1450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixLoad_2x2_f(Matrix2x2 *m, const float *f) { 1470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->load(f); 1480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixLoad_4x4_4x4(Matrix4x4 *m, const Matrix4x4 *s) { 1510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->load(s); 1520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixLoad_4x4_3x3(Matrix4x4 *m, const Matrix3x3 *s) { 1540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->load(s); 1550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixLoad_4x4_2x2(Matrix4x4 *m, const Matrix2x2 *s) { 1570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->load(s); 1580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixLoad_3x3_3x3(Matrix3x3 *m, const Matrix3x3 *s) { 1600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->load(s); 1610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixLoad_2x2_2x2(Matrix2x2 *m, const Matrix2x2 *s) { 1630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->load(s); 1640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixLoadRotate(Matrix4x4 *m, float rot, float x, float y, float z) { 1670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->loadRotate(rot, x, y, z); 1680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixLoadScale(Matrix4x4 *m, float x, float y, float z) { 1700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->loadScale(x, y, z); 1710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixLoadTranslate(Matrix4x4 *m, float x, float y, float z) { 1730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->loadTranslate(x, y, z); 1740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixRotate(Matrix4x4 *m, float rot, float x, float y, float z) { 1760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->rotate(rot, x, y, z); 1770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixScale(Matrix4x4 *m, float x, float y, float z) { 1790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->scale(x, y, z); 1800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixTranslate(Matrix4x4 *m, float x, float y, float z) { 1820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->translate(x, y, z); 1830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixLoadMultiply_4x4_4x4_4x4(Matrix4x4 *m, const Matrix4x4 *lhs, const Matrix4x4 *rhs) { 1860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->loadMultiply(lhs, rhs); 1870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixLoadMultiply_3x3_3x3_3x3(Matrix3x3 *m, const Matrix3x3 *lhs, const Matrix3x3 *rhs) { 1890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->loadMultiply(lhs, rhs); 1900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixLoadMultiply_2x2_2x2_2x2(Matrix2x2 *m, const Matrix2x2 *lhs, const Matrix2x2 *rhs) { 1920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->loadMultiply(lhs, rhs); 1930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixMultiply_4x4_4x4(Matrix4x4 *m, const Matrix4x4 *rhs) { 1960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->multiply(rhs); 1970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixMultiply_3x3_3x3(Matrix3x3 *m, const Matrix3x3 *rhs) { 1990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->multiply(rhs); 2000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixMultiply_2x2_2x2(Matrix2x2 *m, const Matrix2x2 *rhs) { 2020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->multiply(rhs); 2030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixLoadOrtho(Matrix4x4 *m, float l, float r, float b, float t, float n, float f) { 2060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->loadOrtho(l, r, b, t, n, f); 2070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixLoadFrustum(Matrix4x4 *m, float l, float r, float b, float t, float n, float f) { 2090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->loadFrustum(l, r, b, t, n, f); 2100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixLoadPerspective(Matrix4x4 *m, float fovy, float aspect, float near, float far) { 2120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->loadPerspective(fovy, aspect, near, far); 2130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic bool SC_MatrixInverse_4x4(Matrix4x4 *m) { 2160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return m->inverse(); 2170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic bool SC_MatrixInverseTranspose_4x4(Matrix4x4 *m) { 2190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return m->inverseTranspose(); 2200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixTranspose_4x4(Matrix4x4 *m) { 2220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->transpose(); 2230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixTranspose_3x3(Matrix3x3 *m) { 2250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->transpose(); 2260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_MatrixTranspose_2x2(Matrix2x2 *m) { 2280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m->transpose(); 2290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic float SC_randf(float max) { 2320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines float r = (float)rand(); 2330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines r *= max; 2340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines r /= RAND_MAX; 2350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return r; 2360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic float SC_randf2(float min, float max) { 2390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines float r = (float)rand(); 2400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines r /= RAND_MAX; 2410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines r = r * (max - min) + min; 2420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return r; 2430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic int SC_randi(int max) { 2460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return (int)SC_randf(max); 2470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic int SC_randi2(int min, int max) { 2500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return (int)SC_randf2(min, max); 2510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic float SC_frac(float v) { 2540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int i = (int)floor(v); 2550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return fmin(v - i, 0x1.fffffep-1f); 2560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic int32_t SC_AtomicCas(volatile int32_t *ptr, int32_t expectedValue, int32_t newValue) { 2600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int32_t prev; 2610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines do { 2630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int32_t ret = android_atomic_release_cas(expectedValue, newValue, ptr); 2640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (!ret) { 2650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines // The android cas return 0 if it wrote the value. This means the 2660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines // previous value was the expected value and we can return. 2670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return expectedValue; 2680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 2690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines // We didn't write the value and need to load the "previous" value. 2700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines prev = *ptr; 2710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines // A race condition exists where the expected value could appear after our cas failed 2730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines // above. In this case loop until we have a legit previous value or the 2740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines // write passes. 2750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } while (prev == expectedValue); 2760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return prev; 2770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic int32_t SC_AtomicInc(volatile int32_t *ptr) { 2810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return android_atomic_inc(ptr); 2820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic int32_t SC_AtomicDec(volatile int32_t *ptr) { 2850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return android_atomic_dec(ptr); 2860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic int32_t SC_AtomicAdd(volatile int32_t *ptr, int32_t value) { 2890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return android_atomic_add(value, ptr); 2900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic int32_t SC_AtomicSub(volatile int32_t *ptr, int32_t value) { 2930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int32_t prev, status; 2940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines do { 2950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines prev = *ptr; 2960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines status = android_atomic_release_cas(prev, prev - value, ptr); 2970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } while (CC_UNLIKELY(status != 0)); 2980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return prev; 2990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 3000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 3010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic int32_t SC_AtomicAnd(volatile int32_t *ptr, int32_t value) { 3020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return android_atomic_and(value, ptr); 3030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 3040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 3050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic int32_t SC_AtomicOr(volatile int32_t *ptr, int32_t value) { 3060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return android_atomic_or(value, ptr); 3070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 3080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 3090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic int32_t SC_AtomicXor(volatile int32_t *ptr, int32_t value) { 3100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int32_t prev, status; 3110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines do { 3120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines prev = *ptr; 3130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines status = android_atomic_release_cas(prev, prev ^ value, ptr); 3140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } while (CC_UNLIKELY(status != 0)); 3150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return prev; 3160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 3170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 3180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic uint32_t SC_AtomicUMin(volatile uint32_t *ptr, uint32_t value) { 3190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t prev, status; 3200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines do { 3210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines prev = *ptr; 3220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t n = rsMin(value, prev); 3230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines status = android_atomic_release_cas((int32_t) prev, (int32_t)n, (volatile int32_t*) ptr); 3240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } while (CC_UNLIKELY(status != 0)); 3250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return prev; 3260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 3270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 3280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic int32_t SC_AtomicMin(volatile int32_t *ptr, int32_t value) { 3290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int32_t prev, status; 3300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines do { 3310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines prev = *ptr; 3320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int32_t n = rsMin(value, prev); 3330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines status = android_atomic_release_cas(prev, n, ptr); 3340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } while (CC_UNLIKELY(status != 0)); 3350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return prev; 3360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 3370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 3380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic uint32_t SC_AtomicUMax(volatile uint32_t *ptr, uint32_t value) { 3390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t prev, status; 3400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines do { 3410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines prev = *ptr; 3420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t n = rsMax(value, prev); 3430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines status = android_atomic_release_cas((int32_t) prev, (int32_t) n, (volatile int32_t*) ptr); 3440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } while (CC_UNLIKELY(status != 0)); 3450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return prev; 3460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 3470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 3480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic int32_t SC_AtomicMax(volatile int32_t *ptr, int32_t value) { 3490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int32_t prev, status; 3500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines do { 3510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines prev = *ptr; 3520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int32_t n = rsMax(value, prev); 3530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines status = android_atomic_release_cas(prev, n, ptr); 3540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } while (CC_UNLIKELY(status != 0)); 3550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return prev; 3560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 3570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 3580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 3590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 3600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines////////////////////////////////////////////////////////////////////////////// 3610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// Class implementation 3620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines////////////////////////////////////////////////////////////////////////////// 3630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 3640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// llvm name mangling ref 3650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// <builtin-type> ::= v # void 3660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// ::= b # bool 3670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// ::= c # char 3680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// ::= a # signed char 3690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// ::= h # unsigned char 3700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// ::= s # short 3710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// ::= t # unsigned short 3720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// ::= i # int 3730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// ::= j # unsigned int 3740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// ::= l # long 3750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// ::= m # unsigned long 3760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// ::= x # long long, __int64 3770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// ::= y # unsigned long long, __int64 3780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// ::= f # float 3790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// ::= d # double 3800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 38122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat acos(float x) { 38222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return acosf(x); 38322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 38422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 38522b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat acosh(float x) { 38622b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return acoshf(x); 38722b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 38822b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 38922b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat asin(float x) { 39022b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return asinf(x); 39122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 39222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 39322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat asinh(float x) { 39422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return asinhf(x); 39522b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 39622b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 39722b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat atan(float x) { 39822b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return atanf(x); 39922b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 40022b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 40122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat atan2(float y, float x) { 40222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return atan2f(y, x); 40322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 40422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 40522b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat atanh(float x) { 40622b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return atanhf(x); 40722b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 40822b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 40922b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat cbrt(float x) { 41022b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return cbrtf(x); 41122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 41222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 41322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat ceil(float x) { 41422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return ceilf(x); 41522b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 41622b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 41722b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat copysign(float x, float y) { 41822b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return copysignf(x, y); 41922b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 42022b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 42122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat cos(float x) { 42222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return cosf(x); 42322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 42422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 42522b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat cosh(float x) { 42622b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return coshf(x); 42722b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 42822b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 42922b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat erfc(float x) { 43022b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return erfcf(x); 43122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 43222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 43322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat erf(float x) { 43422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return erff(x); 43522b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 43622b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 43722b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat exp(float x) { 43822b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return expf(x); 43922b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 44022b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 44122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat exp2(float x) { 44222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return exp2f(x); 44322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 44422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 44522b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat exp10(float x) { 44622b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return SC_exp10(x); 44722b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 44822b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 44922b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat expm1(float x) { 45022b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return expm1f(x); 45122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 45222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 45322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat fabs(float x) { 45422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return fabsf(x); 45522b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 45622b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 45722b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat fdim(float x, float y) { 45822b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return fdimf(x, y); 45922b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 46022b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 46122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat floor(float x) { 46222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return floorf(x); 46322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 46422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 46522b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat fma(float x, float y, float z) { 46622b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return fmaf(x, y, z); 46722b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 46822b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 46922b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat fmax(float x, float y) { 47022b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return fmaxf(x, y); 47122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 47222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 47322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat fmin(float x, float y) { 47422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return fminf(x, y); 47522b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 47622b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 47722b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat fmod(float x, float y) { 47822b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return fmodf(x, y); 47922b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 48022b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 48122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat fract(float x, float *y) { 48222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return SC_fract(x, y); 48322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 48422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 48522b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat frexp(float x, int *y) { 48622b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return frexpf(x, y); 48722b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 48822b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 48922b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat hypot(float x, float y) { 49022b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return hypotf(x, y); 49122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 49222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 49322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesint ilogb(float x) { 49422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return ilogbf(x); 49522b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 49622b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 49722b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat ldexp(float x, int y) { 49822b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return ldexpf(x, y); 49922b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 50022b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 50122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat lgamma(float x) { 50222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return lgammaf(x); 50322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 50422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 50522b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat lgamma(float x, int *y) { 50622b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return lgammaf_r(x, y); 50722b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 50822b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 50922b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat log(float x) { 51022b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return logf(x); 51122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 51222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 51322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat log2(float x) { 51422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return SC_log2(x); 51522b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 51622b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 51722b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat log10(float x) { 51822b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return log10f(x); 51922b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 52022b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 52122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat log1p(float x) { 52222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return log1pf(x); 52322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 52422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 52522b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat logb(float x) { 52622b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return logbf(x); 52722b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 52822b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 52922b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat modf(float x, float *y) { 53022b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return modff(x, y); 53122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 53222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 53322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat nextafter(float x, float y) { 53422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return nextafterf(x, y); 53522b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 53622b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 53722b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat pow(float x, float y) { 53822b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return powf(x, y); 53922b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 54022b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 54122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat remainder(float x, float y) { 54222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return remainderf(x, y); 54322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 54422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 54522b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat remquo(float x, float y, int *z) { 54622b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return remquof(x, y, z); 54722b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 54822b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 54922b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat rint(float x) { 55022b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return rintf(x); 55122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 55222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 55322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat rootn(float x, int y) { 55422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return SC_rootn(x, y); 55522b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 55622b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 55722b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat round(float x) { 55822b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return roundf(x); 55922b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 56022b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 56122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat rsqrt(float x) { 56222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return SC_rsqrt(x); 56322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 56422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 56522b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat sin(float x) { 56622b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return sinf(x); 56722b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 56822b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 56922b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat sincos(float x, float *y) { 57022b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return SC_sincos(x, y); 57122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 57222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 57322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat sinh(float x) { 57422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return sinhf(x); 57522b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 57622b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 57722b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat sqrt(float x) { 57822b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return sqrtf(x); 57922b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 58022b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 58122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat tan(float x) { 58222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return tanf(x); 58322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 58422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 58522b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat tanh(float x) { 58622b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return tanhf(x); 58722b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 58822b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 58922b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat tgamma(float x) { 590048436b8e1b9c5bdcdc0e0d552b147bbc6e2d7bfStephen Hines return SC_tgamma(x); 59122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 59222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 59322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesfloat trunc(float x) { 59422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return truncf(x); 59522b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 59622b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 59722b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesuint32_t clz(uint32_t v) { 59822b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return SC_clz_u32(v); 59922b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 60022b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 60122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesuint16_t clz(uint16_t v) { 60222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return SC_clz_u16(v); 60322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 60422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 60522b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesuint8_t clz(uint8_t v) { 60622b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return SC_clz_u8(v); 60722b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 60822b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 60922b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesint32_t clz(int32_t v) { 61022b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return SC_clz_i32(v); 61122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 61222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 61322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesint16_t clz(int16_t v) { 61422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return SC_clz_i16(v); 61522b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 61622b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 61722b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hineschar clz(char v) { 61822b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return SC_clz_i8(v); 61922b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 62022b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 62122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesint16_t abs(int16_t v) { 62222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return SC_abs_i16(v); 62322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 62422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 62522b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesextern "C" { 62622b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hinesint _Z3absi(int v) { 62722b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return SC_abs_i32(v); 62822b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 62922b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 63022b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 63122b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hineschar abs(char v) { 63222b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines return SC_abs_i8(v); 63322b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines} 63422b64d47ff0ee55e91cb659d15aad9cdead8adc6Stephen Hines 6350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic RsdSymbolTable gSyms[] = { 6360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z4acosf", (void *)&acosf, true }, 6370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z5acoshf", (void *)&acoshf, true }, 6380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z4asinf", (void *)&asinf, true }, 6390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z5asinhf", (void *)&asinhf, true }, 6400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z4atanf", (void *)&atanf, true }, 6410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z5atan2ff", (void *)&atan2f, true }, 6420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z5atanhf", (void *)&atanhf, true }, 6430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z4cbrtf", (void *)&cbrtf, true }, 6440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z4ceilf", (void *)&ceilf, true }, 6450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z8copysignff", (void *)©signf, true }, 6460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3cosf", (void *)&cosf, true }, 6470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z4coshf", (void *)&coshf, true }, 6480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z4erfcf", (void *)&erfcf, true }, 6490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3erff", (void *)&erff, true }, 6500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3expf", (void *)&expf, true }, 6510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z4exp2f", (void *)&exp2f, true }, 6520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z5exp10f", (void *)&SC_exp10, true }, 6530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z5expm1f", (void *)&expm1f, true }, 6540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z4fabsf", (void *)&fabsf, true }, 6550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z4fdimff", (void *)&fdimf, true }, 6560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z5floorf", (void *)&floorf, true }, 6570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3fmafff", (void *)&fmaf, true }, 6580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z4fmaxff", (void *)&fmaxf, true }, 6590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z4fminff", (void *)&fminf, true }, // float fmin(float, float) 6600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z4fmodff", (void *)&fmodf, true }, 6610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z5fractfPf", (void *)&SC_fract, true }, 6620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z5frexpfPi", (void *)&frexpf, true }, 6630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z5hypotff", (void *)&hypotf, true }, 6640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z5ilogbf", (void *)&ilogbf, true }, 6650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z5ldexpfi", (void *)&ldexpf, true }, 6660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z6lgammaf", (void *)&lgammaf, true }, 6670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z6lgammafPi", (void *)&lgammaf_r, true }, 6680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3logf", (void *)&logf, true }, 6690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z4log2f", (void *)&SC_log2, true }, 6700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z5log10f", (void *)&log10f, true }, 6710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z5log1pf", (void *)&log1pf, true }, 6720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z4logbf", (void *)&logbf, true }, 6730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z4modffPf", (void *)&modff, true }, 6740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines //{ "_Z3nanj", (void *)&SC_nan, true }, 6750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z9nextafterff", (void *)&nextafterf, true }, 6760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3powff", (void *)&powf, true }, 6770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z9remainderff", (void *)&remainderf, true }, 6780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z6remquoffPi", (void *)&remquof, true }, 6790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z4rintf", (void *)&rintf, true }, 6800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z5rootnfi", (void *)&SC_rootn, true }, 6810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z5roundf", (void *)&roundf, true }, 6820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z5rsqrtf", (void *)&SC_rsqrt, true }, 6830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3sinf", (void *)&sinf, true }, 6840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z6sincosfPf", (void *)&SC_sincos, true }, 6850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z4sinhf", (void *)&sinhf, true }, 6860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z4sqrtf", (void *)&sqrtf, true }, 6870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3tanf", (void *)&tanf, true }, 6880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z4tanhf", (void *)&tanhf, true }, 689048436b8e1b9c5bdcdc0e0d552b147bbc6e2d7bfStephen Hines { "_Z6tgammaf", (void *)&SC_tgamma, true }, 6900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z5truncf", (void *)&truncf, true }, 6910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 6920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3absi", (void *)&SC_abs_i32, true }, 6930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3abss", (void *)&SC_abs_i16, true }, 6940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3absc", (void *)&SC_abs_i8, true }, 6950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3clzj", (void *)&SC_clz_u32, true }, 6960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3clzt", (void *)&SC_clz_u16, true }, 6970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3clzh", (void *)&SC_clz_u8, true }, 6980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3clzi", (void *)&SC_clz_i32, true }, 6990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3clzs", (void *)&SC_clz_i16, true }, 7000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3clzc", (void *)&SC_clz_i8, true }, 7010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3maxjj", (void *)&SC_max_u32, true }, 7020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3maxtt", (void *)&SC_max_u16, true }, 7030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3maxhh", (void *)&SC_max_u8, true }, 7040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3maxii", (void *)&SC_max_i32, true }, 7050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3maxss", (void *)&SC_max_i16, true }, 7060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3maxcc", (void *)&SC_max_i8, true }, 7070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3minjj", (void *)&SC_min_u32, true }, 7080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3mintt", (void *)&SC_min_u16, true }, 7090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3minhh", (void *)&SC_min_u8, true }, 7100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3minii", (void *)&SC_min_i32, true }, 7110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3minss", (void *)&SC_min_i16, true }, 7120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3mincc", (void *)&SC_min_i8, true }, 7130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 7140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z5clampfff", (void *)&SC_clamp_f32, true }, 7150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3maxff", (void *)&SC_max_f32, true }, 7160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z3minff", (void *)&SC_min_f32, true }, 7170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z4stepff", (void *)&SC_step_f32, true }, 7180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines //{ "smoothstep", (void *)&, true }, 7190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z4signf", (void *)&SC_sign_f32, true }, 7200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 7210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines // matrix 7220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z20rsMatrixLoadIdentityP12rs_matrix4x4", (void *)&SC_MatrixLoadIdentity_4x4, true }, 7230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z20rsMatrixLoadIdentityP12rs_matrix3x3", (void *)&SC_MatrixLoadIdentity_3x3, true }, 7240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z20rsMatrixLoadIdentityP12rs_matrix2x2", (void *)&SC_MatrixLoadIdentity_2x2, true }, 7250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 7260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z12rsMatrixLoadP12rs_matrix4x4PKf", (void *)&SC_MatrixLoad_4x4_f, true }, 7270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z12rsMatrixLoadP12rs_matrix3x3PKf", (void *)&SC_MatrixLoad_3x3_f, true }, 7280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z12rsMatrixLoadP12rs_matrix2x2PKf", (void *)&SC_MatrixLoad_2x2_f, true }, 7290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 7300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z12rsMatrixLoadP12rs_matrix4x4PKS_", (void *)&SC_MatrixLoad_4x4_4x4, true }, 7310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z12rsMatrixLoadP12rs_matrix4x4PK12rs_matrix3x3", (void *)&SC_MatrixLoad_4x4_3x3, true }, 7320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z12rsMatrixLoadP12rs_matrix4x4PK12rs_matrix2x2", (void *)&SC_MatrixLoad_4x4_2x2, true }, 7330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z12rsMatrixLoadP12rs_matrix3x3PKS_", (void *)&SC_MatrixLoad_3x3_3x3, true }, 7340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z12rsMatrixLoadP12rs_matrix2x2PKS_", (void *)&SC_MatrixLoad_2x2_2x2, true }, 7350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 7360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z18rsMatrixLoadRotateP12rs_matrix4x4ffff", (void *)&SC_MatrixLoadRotate, true }, 7370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z17rsMatrixLoadScaleP12rs_matrix4x4fff", (void *)&SC_MatrixLoadScale, true }, 7380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z21rsMatrixLoadTranslateP12rs_matrix4x4fff", (void *)&SC_MatrixLoadTranslate, true }, 7390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z14rsMatrixRotateP12rs_matrix4x4ffff", (void *)&SC_MatrixRotate, true }, 7400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z13rsMatrixScaleP12rs_matrix4x4fff", (void *)&SC_MatrixScale, true }, 7410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z17rsMatrixTranslateP12rs_matrix4x4fff", (void *)&SC_MatrixTranslate, true }, 7420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 7430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z20rsMatrixLoadMultiplyP12rs_matrix4x4PKS_S2_", (void *)&SC_MatrixLoadMultiply_4x4_4x4_4x4, true }, 7440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z16rsMatrixMultiplyP12rs_matrix4x4PKS_", (void *)&SC_MatrixMultiply_4x4_4x4, true }, 7450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z20rsMatrixLoadMultiplyP12rs_matrix3x3PKS_S2_", (void *)&SC_MatrixLoadMultiply_3x3_3x3_3x3, true }, 7460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z16rsMatrixMultiplyP12rs_matrix3x3PKS_", (void *)&SC_MatrixMultiply_3x3_3x3, true }, 7470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z20rsMatrixLoadMultiplyP12rs_matrix2x2PKS_S2_", (void *)&SC_MatrixLoadMultiply_2x2_2x2_2x2, true }, 7480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z16rsMatrixMultiplyP12rs_matrix2x2PKS_", (void *)&SC_MatrixMultiply_2x2_2x2, true }, 7490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 7500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z17rsMatrixLoadOrthoP12rs_matrix4x4ffffff", (void *)&SC_MatrixLoadOrtho, true }, 7510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z19rsMatrixLoadFrustumP12rs_matrix4x4ffffff", (void *)&SC_MatrixLoadFrustum, true }, 7520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z23rsMatrixLoadPerspectiveP12rs_matrix4x4ffff", (void *)&SC_MatrixLoadPerspective, true }, 7530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 7540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z15rsMatrixInverseP12rs_matrix4x4", (void *)&SC_MatrixInverse_4x4, true }, 7550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z24rsMatrixInverseTransposeP12rs_matrix4x4", (void *)&SC_MatrixInverseTranspose_4x4, true }, 7560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z17rsMatrixTransposeP12rs_matrix4x4", (void *)&SC_MatrixTranspose_4x4, true }, 757ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams { "_Z17rsMatrixTransposeP12rs_matrix3x3", (void *)&SC_MatrixTranspose_3x3, true }, 758ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams { "_Z17rsMatrixTransposeP12rs_matrix2x2", (void *)&SC_MatrixTranspose_2x2, true }, 7590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 7600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines // RS Math 7610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z6rsRandi", (void *)&SC_randi, true }, 7620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z6rsRandii", (void *)&SC_randi2, true }, 7630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z6rsRandf", (void *)&SC_randf, true }, 7640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z6rsRandff", (void *)&SC_randf2, true }, 7650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z6rsFracf", (void *)&SC_frac, true }, 7660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 7670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines // Atomics 7680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z11rsAtomicIncPVi", (void *)&SC_AtomicInc, true }, 7690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z11rsAtomicIncPVj", (void *)&SC_AtomicInc, true }, 7700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z11rsAtomicDecPVi", (void *)&SC_AtomicDec, true }, 7710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z11rsAtomicDecPVj", (void *)&SC_AtomicDec, true }, 7720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z11rsAtomicAddPVii", (void *)&SC_AtomicAdd, true }, 7730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z11rsAtomicAddPVjj", (void *)&SC_AtomicAdd, true }, 7740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z11rsAtomicSubPVii", (void *)&SC_AtomicSub, true }, 7750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z11rsAtomicSubPVjj", (void *)&SC_AtomicSub, true }, 7760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z11rsAtomicAndPVii", (void *)&SC_AtomicAnd, true }, 7770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z11rsAtomicAndPVjj", (void *)&SC_AtomicAnd, true }, 7780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z10rsAtomicOrPVii", (void *)&SC_AtomicOr, true }, 7790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z10rsAtomicOrPVjj", (void *)&SC_AtomicOr, true }, 7800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z11rsAtomicXorPVii", (void *)&SC_AtomicXor, true }, 7810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z11rsAtomicXorPVjj", (void *)&SC_AtomicXor, true }, 7820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z11rsAtomicMinPVii", (void *)&SC_AtomicMin, true }, 7830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z11rsAtomicMinPVjj", (void *)&SC_AtomicUMin, true }, 7840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z11rsAtomicMaxPVii", (void *)&SC_AtomicMax, true }, 7850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z11rsAtomicMaxPVjj", (void *)&SC_AtomicUMax, true }, 7860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z11rsAtomicCasPViii", (void *)&SC_AtomicCas, true }, 7870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { "_Z11rsAtomicCasPVjjj", (void *)&SC_AtomicCas, true }, 7880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 7890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { NULL, NULL, false } 7900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}; 7910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 7920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesconst RsdSymbolTable * rsdLookupSymbolMath(const char *sym) { 7930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const RsdSymbolTable *syms = gSyms; 7940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 7950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines while (syms->mPtr) { 7960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (!strcmp(syms->mName, sym)) { 7970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return syms; 7980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 7990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines syms++; 8000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 8010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return NULL; 8020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 8030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 804