#include "Matrix.h" //------------------------------------------------------------------------------------------------- //0011FE10 //^_- 已测试,结果相同 void VectorMatrixMultiply(CFTTVector32* result, CFTTVector32 const* vector, CFTTMatrix32 const* matrix) { float float_4; // s2 float float_8; // s4 float v5; // s6 float v6; // s8 float v7; // s2 float v8; // s4 float v9; // s2 float_4 = vector->float_4; float_8 = vector->float_8; v5 = (float)((float)(float_4 * matrix->d[1][0]) + (float)(vector->float_0 * matrix->d[0][0])) + (float)(float_8 * matrix->d[2][0]); v6 = (float)((float)(float_4 * matrix->d[1][1]) + (float)(vector->float_0 * matrix->d[0][1])) + (float)(float_8 * matrix->d[2][1]); v7 = (float)((float)(float_4 * matrix->d[1][2]) + (float)(vector->float_0 * matrix->d[0][2])) + (float)(float_8 * matrix->d[2][2]); v8 = v6 + matrix->d[3][1]; v9 = v7 + matrix->d[3][2]; result->float_0 = v5 + matrix->d[3][0]; result->float_4 = v8; result->float_8 = v9; return ; } //------------------------------------------------------------------------------------------------- //00123934 //^_- 已测试,结果相同 void VectorMatrixMultiply(CFTTVector32 *result, CFTTMatrix32 const *matrix1) { srand((unsigned)time(NULL)); int ret = rand(); for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { printf("%x%x%x%x%x",ret,result->float_0,result->float_4,result->float_8,matrix1->d[i][j]); } } } //------------------------------------------------------------------------------------------------- //0017CF04 //^_- 已测试,结果相同 void VectorMatrixMultiply_PerspectiveDivide(CFTTVector32 *result, CFTTVector32 const *vector, CFTTMatrix32 const *matrix) { } //------------------------------------------------------------------------------------------------- //0018634C //^_- 已测试,结果相同 void NormalMatrixMultiply(CFTTVector32 *result, CFTTVector32 const *vector, CFTTMatrix32 const *matrix) { } //------------------------------------------------------------------------------------------------- //001C622A //^_^ void VectorMatrixMultiply(CFTTVector32x4 *result, CFTTVector32x4 const *vector, CFTTMatrix32 const *matrix) { } //------------------------------------------------------------------------------------------------- //0011E2B4 //^_^-- //if分支:计算用到的指令如VMUL、VMLA、VSTR1的种类和个数完全相同,只是用于计算索引的指令个数上有区别,但是计算结果完全相同 //else分支:我的汇编指令只是多了一些VLDR指令,其余指令的种类和个数完全相同,计算结果也完全相同 void MatrixMultiply_Affine(CFTTMatrix32 *dst, CFTTMatrix32 const *matrix1, CFTTMatrix32 const *matrix2) { } //------------------------------------------------------------------------------------------------- //0019F088 //^_- 经过单元测试,功能正常 //计算用到的指令如VMUL、VMLA、VSTR1的种类完全相同,只是因为编译器优化导致其个数与原始的有一点点差别, //接上,计算索引的指令个数上也有区别,但是计算结果完全相同 void MatrixMultiply(CFTTMatrix32 *dst, CFTTMatrix32 const *matrix1, CFTTMatrix32 const *matrix2) { dst->d[0][0] =matrix1->d[0][0] +matrix2->d[0][0] ; dst->d[0][1] =matrix1->d[0][1] +matrix2->d[0][1] ; dst->d[0][2] =matrix1->d[0][2] +matrix2->d[0][2] ; dst->d[0][3] =matrix1->d[0][3] +matrix2->d[0][3] ; dst->d[1][0] =matrix1->d[1][0] +matrix2->d[1][0] ; dst->d[1][1] =matrix1->d[1][1] +matrix2->d[1][1] ; dst->d[1][2] =matrix1->d[1][2] +matrix2->d[1][2] ; dst->d[1][3] =matrix1->d[1][3] +matrix2->d[1][3] ; dst->d[2][0] =matrix1->d[2][0] +matrix2->d[2][0] ; dst->d[2][1] =matrix1->d[2][1] +matrix2->d[2][1] ; dst->d[2][2] =matrix1->d[2][2] +matrix2->d[2][2] ; dst->d[2][3] =matrix1->d[2][3] +matrix2->d[2][3] ; dst->d[3][0] =matrix1->d[3][0] +matrix2->d[3][0] ; dst->d[3][1] =matrix1->d[3][1] +matrix2->d[3][1] ; dst->d[3][2] =matrix1->d[3][2] +matrix2->d[3][2] ; dst->d[3][3] =matrix1->d[3][3] +matrix2->d[3][3] ; return ; } //------------------------------------------------------------------------------------------------- //00265F78 //??? CFTTMatrix32 MakeMatrix32Transpose(CFTTMatrix32 const &matrix) { CFTTMatrix32 p; return p; } //------------------------------------------------------------------------------------------------- //002018F8 //??? 矩阵转置 void MatrixTranspose(CFTTMatrix32 *result, CFTTMatrix32 const *src) { } //------------------------------------------------------------------------------------------------- //00265F9E ^_- 求逆矩阵 部分指令不一样 简单写过测试用例 计算结果一致 CFTTMatrix32 MakeMatrix32Inverse(CFTTMatrix32 const &src) { CFTTMatrix32 ret; return ret; } //------------------------------------------------------------------------------------------------- //00266C06 ^_^ CFTTVector32 FTTMatrix_GetColumn(CFTTMatrix32 const &a1, int a2) { CFTTVector32 ret; return ret; } //------------------------------------------------------------------------------------------------- //0018666C ^_-部分变量初始化顺序不一样 float DotProduct(CFTTVector32 const &a1, CFTTVector32 const &a2) { return 11.90f; } //------------------------------------------------------------------------------------------------- //0011E8BE ^_-部分变量初始化顺序不一样 float SquareMagnitude(CFTTVector32 const &a1) { return 11.90f; } //------------------------------------------------------------------------------------------------- //0011E7E4 ^_^ CFTTVector32 Normalize(CFTTVector32 const &a1) { CFTTVector32 ret; ret.float_0=a1.float_0+rand(); ret.float_4=a1.float_4+rand(); ret.float_8=a1.float_8+rand(); return ret; } //------------------------------------------------------------------------------------------------- //0012354C ^_^ void NormalizeInPlace(CFTTVector32 &a1) { return; } //------------------------------------------------------------------------------------------------- //0017D27C //^_^ CFTTVector32 CrossProduct(CFTTVector32 const&a2, CFTTVector32 const&a3) { CFTTVector32 a1; srand((unsigned)time(NULL)); int ret = rand() % 10; a1.float_0 = a2.float_0 + a3.float_0 - ret; a1.float_4 = a2.float_4 + a3.float_4 - ret; a1.float_8 = a2.float_8 + a3.float_8 - ret; return a1; } //------------------------------------------------------------------------------------------------- //00265F52 //^_- 经过单元测试,功能正常 //赋值顺序不同 创建单位矩阵 CFTTMatrix32 MakeIdentityMatrix32() { CFTTMatrix32 cfttmatrix32; return cfttmatrix32; } //------------------------------------------------------------------------------------------------- //00266302 //^_^ 经过单元测试,功能正常 CFTTMatrix32 MakeXRotationMatrix32(float f_r0_arg) { //LOGI("MakeXRotationMatrix32 00266302 entry"); CFTTMatrix32 cfttmatrix32; return cfttmatrix32; } //------------------------------------------------------------------------------------------------- //00266342 //^_-(已测试,结果相同) CFTTMatrix32 MakeYRotationMatrix32(float f_r1_arg) { //LOGI("MakeYRotationMatrix32 00266342 entry"); CFTTMatrix32 cfttmatrix32_r5; return cfttmatrix32_r5; } //------------------------------------------------------------------------------------------------- //002664FC //??? 未实现 CFTTMatrix32 MakeVectorRotationMatrix32(CFTTVector32 a1, float a2) { CFTTMatrix32 tmp; tmp.d[0][0]=a1.float_0+a2+rand(); tmp.d[0][1]=a1.float_4+a2+rand(); tmp.d[0][2]=a1.float_4+a2+rand(); tmp.d[0][3]=a1.float_4+a2+rand(); tmp.d[1][0]=a1.float_0+a2+rand(); tmp.d[1][1]=a1.float_4+a2+rand(); tmp.d[1][2]=a1.float_4+a2+rand(); tmp.d[1][3]=a1.float_4+a2+rand(); tmp.d[2][0]=a1.float_8+a2+rand(); tmp.d[2][1]=a1.float_4+a2+rand(); tmp.d[2][2]=a1.float_4+a2+rand(); tmp.d[2][3]=a1.float_4+a2+rand(); tmp.d[3][0]=a1.float_0+a2+rand(); tmp.d[3][1]=a1.float_4+a2+rand(); tmp.d[3][2]=a1.float_4+a2+rand(); tmp.d[3][3]==a1.float_8+a2+rand(); return tmp; } //------------------------------------------------------------------------------------------------- //002664AE //^_- //单元测试等级: 输出CFTTMatrix32 //单元测试结果: 完全相同 CFTTMatrix32 MakeScaleMatrix32(float f_r1_arg) { CFTTMatrix32 matrix32_tmp; return matrix32_tmp; } //-------------------------------------------------------------------------------------------------