| 12 | static F32 sBasisHermite[4][4]; |
| 13 | |
| 14 | void Tridiag_Solve(F32* a, F32* b, F32* c, xVec3* d, xVec3* x, S32 n) |
| 15 | { |
| 16 | S32 j; |
| 17 | |
| 18 | F32* a_temp; |
| 19 | F32* b_temp; |
| 20 | F32* c_temp; |
| 21 | xVec3* delta; |
| 22 | |
| 23 | S32 vec_offset; |
| 24 | F32 beta; |
| 25 | F32* gamma; |
| 26 | |
| 27 | F32* c_prime; |
| 28 | F32* d_prime; |
| 29 | |
| 30 | c_prime = (F32*)RwMalloc(n << 2); |
| 31 | d_prime = (F32*)RwMalloc(n * 0xC); |
| 32 | |
| 33 | c_prime[0] = *c / *b; |
| 34 | |
| 35 | d_prime[0] = d->x / *b; |
| 36 | d_prime[1] = d->y / *b; |
| 37 | d_prime[2] = d->z / *b; |
| 38 | |
| 39 | a_temp = a + 1; |
| 40 | b_temp = b + 1; |
| 41 | c_temp = c + 1; |
| 42 | delta = d + 1; |
| 43 | vec_offset = 0xC; |
| 44 | |
| 45 | if (n > 1) |
| 46 | { |
| 47 | for (j = 1; j < n; j += 1) |
| 48 | { |
| 49 | beta = b_temp[0]; |
| 50 | gamma = (F32*)((S32)d_prime + vec_offset - 0xc); |
| 51 | vec_offset = vec_offset + 0xC; |
| 52 | b_temp = b_temp + 1; |
| 53 | c_temp = c_temp + 1; |
| 54 | *b_temp = *b_temp - *a_temp * c_prime[0]; |
| 55 | c_prime[1] = *c_temp / beta; |
| 56 | d_prime[3] = (delta->x - *a_temp * gamma[0]) / beta; |
| 57 | d_prime[4] = (delta->y - *a_temp * gamma[1]) / beta; |
| 58 | *c_temp = *a_temp; |
| 59 | a_temp = a_temp + 1; |
| 60 | delta = delta + 1; |
| 61 | d_prime[5] = (*(&delta->z) - *c_temp * gamma[2]) / beta; |
| 62 | c_prime = c_prime + 1; |
| 63 | d_prime = d_prime + 3; |
| 64 | } |
| 65 | } |
| 66 | |
| 67 | j = n - 2; |
| 68 | c_prime = d_prime + (n - 1) * 3; |
| 69 | delta->x = c_prime[0]; |
| 70 | delta->y = c_prime[1]; |
| 71 | delta->z = c_prime[2]; |
no outgoing calls
no test coverage detected