- #include "matrix23.h" 
- #include "harness/trace.h" 
-   
- #include <math.h> 
-   
- #define A(x, y) A->m[x][y] 
- #define B(x, y) B->m[x][y] 
- #define C(x, y) C->m[x][y] 
- #define M(x, y) mat->m[x][y] 
-   
- #define BR_MAC2(a, b, c, d) ((a) * (b) + (c) * (d)) 
-   
- br_matrix23 mattmp1_23; 
- br_matrix23 mattmp2_23; 
-   
- // IDA: void __cdecl BrMatrix23Copy(br_matrix23 *A, br_matrix23 *B) 
- void BrMatrix23Copy(br_matrix23* A, br_matrix23* B) { 
-     LOG_TRACE("(%p, %p)", A, B); 
-   
-     A(0, 0) = B(0, 0); 
-     A(0, 1) = B(0, 1); 
-     A(1, 0) = B(1, 0); 
-     A(1, 1) = B(1, 1); 
-     A(2, 0) = B(2, 0); 
-     A(2, 1) = B(2, 1); 
- } 
-   
- // IDA: void __cdecl BrMatrix23Mul(br_matrix23 *A, br_matrix23 *B, br_matrix23 *C) 
- void BrMatrix23Mul(br_matrix23* A, br_matrix23* B, br_matrix23* C) { 
-     LOG_TRACE("(%p, %p, %p)", A, B, C); 
-   
-     A(0, 0) = BR_MAC2(B(0, 0), C(0, 0), B(0, 1), C(1, 0)); 
-     A(0, 1) = BR_MAC2(B(0, 0), C(0, 1), B(0, 1), C(1, 1)); 
-     A(1, 0) = BR_MAC2(B(1, 0), C(0, 0), B(1, 1), C(1, 0)); 
-     A(1, 1) = BR_MAC2(B(1, 0), C(0, 1), B(1, 1), C(1, 1)); 
-     A(2, 0) = BR_MAC2(B(2, 0), C(0, 0), B(2, 1), C(1, 0)) + C(2, 0); 
-     A(2, 1) = BR_MAC2(B(2, 0), C(0, 1), B(2, 1), C(1, 1)) + C(2, 1); 
- } 
-   
- // IDA: void __cdecl BrMatrix23Identity(br_matrix23 *mat) 
- void BrMatrix23Identity(br_matrix23* mat) { 
-     LOG_TRACE("(%p)", mat); 
-   
-     M(0, 0) = 1.f; 
-     M(0, 1) = 0.f; 
-     M(1, 0) = 0.f; 
-     M(1, 1) = 1.f; 
-     M(2, 0) = 0.f; 
-     M(2, 1) = 0.f; 
- } 
-   
- // IDA: void __cdecl BrMatrix23Rotate(br_matrix23 *mat, br_angle rz) 
- void BrMatrix23Rotate(br_matrix23* mat, br_angle rz) { 
-     br_scalar s; 
-     br_scalar c; 
-     LOG_TRACE("(%p, %d)", mat, rz); 
-   
-     c = BR_COS(rz); 
-     s = BR_SIN(rz); 
-   
-     M(0, 0) = c; 
-     M(0, 1) = s; 
-     M(1, 0) = -s; 
-     M(1, 1) = c; 
-     M(2, 0) = BR_SCALAR(0.f); 
-     M(2, 1) = BR_SCALAR(0.f); 
- } 
-   
- // IDA: void __cdecl BrMatrix23Translate(br_matrix23 *mat, br_scalar dx, br_scalar dy) 
- void BrMatrix23Translate(br_matrix23* mat, br_scalar dx, br_scalar dy) { 
-     LOG_TRACE("(%p, %f, %f)", mat, dx, dy); 
-   
-     M(0, 0) = BR_SCALAR(1.f); 
-     M(0, 1) = BR_SCALAR(0.f); 
-     M(1, 0) = BR_SCALAR(0.f); 
-     M(1, 1) = BR_SCALAR(1.f); 
-     M(2, 0) = dx; 
-     M(2, 1) = dy; 
- } 
-   
- // IDA: void __cdecl BrMatrix23Scale(br_matrix23 *mat, br_scalar sx, br_scalar sy) 
- void BrMatrix23Scale(br_matrix23* mat, br_scalar sx, br_scalar sy) { 
-     LOG_TRACE("(%p, %f, %f)", mat, sx, sy); 
-   
-     M(0, 0) = sx; 
-     M(0, 1) = BR_SCALAR(0.f); 
-     M(1, 0) = BR_SCALAR(0.f); 
-     M(1, 1) = sy; 
-     M(2, 0) = BR_SCALAR(0.f); 
-     M(2, 1) = BR_SCALAR(0.f); 
- } 
-   
- // IDA: void __cdecl BrMatrix23ShearX(br_matrix23 *mat, br_scalar sy) 
- void BrMatrix23ShearX(br_matrix23* mat, br_scalar sy) { 
-     LOG_TRACE("(%p, %f)", mat, sy); 
-   
-     M(0, 0) = BR_SCALAR(1.f); 
-     M(0, 1) = sy; 
-     M(1, 0) = BR_SCALAR(0.f); 
-     M(1, 1) = BR_SCALAR(1.f); 
-     M(2, 0) = BR_SCALAR(0.f); 
-     M(2, 1) = BR_SCALAR(0.f); 
- } 
-   
- // IDA: void __cdecl BrMatrix23ShearY(br_matrix23 *mat, br_scalar sx) 
- void BrMatrix23ShearY(br_matrix23* mat, br_scalar sx) { 
-     LOG_TRACE("(%p, %f)", mat, sx); 
-   
-     M(0, 0) = BR_SCALAR(1.f); 
-     M(0, 1) = BR_SCALAR(0.f); 
-     M(1, 0) = sx; 
-     M(1, 1) = BR_SCALAR(1.f); 
-     M(2, 0) = BR_SCALAR(0.f); 
-     M(2, 1) = BR_SCALAR(0.f); 
- } 
-   
- // IDA: br_scalar __cdecl BrMatrix23Inverse(br_matrix23 *B, br_matrix23 *A) 
- br_scalar BrMatrix23Inverse(br_matrix23* B, br_matrix23* A) { 
-     br_scalar det; 
-     br_scalar idet; 
-     br_scalar pos; 
-     br_scalar neg; 
-     LOG_TRACE("(%p, %p)", B, A); 
-   
-     idet = A(0, 0) * A(1, 1); 
-     if (idet < BR_SCALAR(0.f)) { 
-         pos = BR_SCALAR(0.f); 
-         neg = idet; 
-     } else { 
-         pos = idet; 
-         neg = BR_SCALAR(0.f); 
-     } 
-     idet = -A(0, 1) * A(1, 0); 
-     if (idet < BR_SCALAR(0.f)) { 
-         neg = neg + idet; 
-     } else { 
-         pos = pos + idet; 
-     } 
-     det = pos + neg; 
-   
-     if (fabs(- det ) <-  2.384186e -- 07f ) {
 
-         return BR_SCALAR(0.f); 
-     } 
-     idet = 1 / det; 
-     B(0, 0) = A(1, 1) * idet; 
-     B(0, 1) = -A(0, 1) * idet; 
-     B(1, 0) = -A(1, 0) * idet; 
-     B(1, 1) = A(0, 0) * idet; 
-     B(2, 0) = BR_MAC2(A(1, 0), A(2, 1), -A(2, 0), A(1, 1)) * idet; 
-     B(2, 1) = BR_MAC2(-A(2, 1), A(0, 0), A(0, 1), A(2, 0)) * idet; 
-     return det; 
- } 
-   
- // IDA: void __cdecl BrMatrix23LPInverse(br_matrix23 *B, br_matrix23 *A) 
- void BrMatrix23LPInverse(br_matrix23* B, br_matrix23* A) { 
-     LOG_TRACE("(%p, %p)", B, A); 
-   
-     B(0, 0) = A(1, 1); 
-     B(0, 1) = -A(0, 1); 
-     B(1, 0) = -A(1, 0); 
-     B(1, 1) = A(0, 0); 
-     B(2, 0) = BR_MAC2(A(1, 0), A(2, 1), -A(2, 0), A(1, 1)); 
-     B(2, 1) = BR_MAC2(-A(2, 1), A(0, 0), A(0, 1), A(2, 0)); 
- } 
-   
- // IDA: void __cdecl BrMatrix23LPNormalise(br_matrix23 *A, br_matrix23 *B) 
- void BrMatrix23LPNormalise(br_matrix23* A, br_matrix23* B) { 
-     LOG_TRACE("(%p, %p)", A, B); 
-   
-     br_scalar norm = sqrtf(BR_MAC2(B(1, 0), B(1, 0), B(1, 1), B(1,1))); 
-     if (norm < 2.384186e-07f) { 
-         A(1, 0) = BR_SCALAR(1.f); 
-         A(1, 1) = BR_SCALAR(0.f); 
-     } else { 
-         A(1, 0) = B(1, 0) / norm; 
-         A(1, 1) = B(1, 1) / norm; 
-     } 
-     A(0, 0) = A(1, 1); 
-     A(0, 1) = -A(1, 0); 
-     A(2, 0) = B(2, 0); 
-     A(2, 1) = B(2, 1); 
- } 
-   
- // IDA: void __cdecl BrMatrix23ApplyP(br_vector2 *A, br_vector2 *B, br_matrix23 *C) 
- void BrMatrix23ApplyP(br_vector2* A, br_vector2* B, br_matrix23* C) { 
-     LOG_TRACE("(%p, %p, %p)", A, B, C); 
-   
-     A->v[0] = BR_MAC2(B->v[0], C(0, 0), B->v[1], C(1, 0)) + C(2, 0); 
-     A->v[1] = BR_MAC2(B->v[0], C(0, 1), B->v[1], C(1, 1)) + C(2, 1); 
- } 
-   
- // IDA: void __cdecl BrMatrix23ApplyV(br_vector2 *A, br_vector2 *B, br_matrix23 *C) 
- void BrMatrix23ApplyV(br_vector2* A, br_vector2* B, br_matrix23* C) { 
-     LOG_TRACE("(%p, %p, %p)", A, B, C); 
-   
-     A->v[0] = BR_MAC2(B->v[0], C(0, 0), B->v[1], C(1, 0)); 
-     A->v[1] = BR_MAC2(B->v[0], C(0, 1), B->v[1], C(1, 1)); 
- } 
-   
- // IDA: void __cdecl BrMatrix23TApplyP(br_vector2 *A, br_vector2 *B, br_matrix23 *C) 
- void BrMatrix23TApplyP(br_vector2* A, br_vector2* B, br_matrix23* C) { 
-     LOG_TRACE("(%p, %p, %p)", A, B, C); 
-   
-     A->v[0] = BR_MAC2(B->v[0], C(0, 0), B->v[1], C(0, 1)); 
-     A->v[1] = BR_MAC2(B->v[0], C(1, 0), B->v[1], C(1, 1)); 
- } 
-   
- // IDA: void __cdecl BrMatrix23TApplyV(br_vector2 *A, br_vector2 *B, br_matrix23 *C) 
- void BrMatrix23TApplyV(br_vector2* A, br_vector2* B, br_matrix23* C) { 
-     LOG_TRACE("(%p, %p, %p)", A, B, C); 
-   
-     A->v[0] = BR_MAC2(B->v[0], C(0, 0), B->v[1], C(0, 1)); 
-     A->v[1] = BR_MAC2(B->v[0], C(1, 0), B->v[1], C(1, 1)); 
- } 
-   
- // IDA: void __cdecl BrMatrix23Pre(br_matrix23 *mat, br_matrix23 *A) 
- void BrMatrix23Pre(br_matrix23* mat, br_matrix23* A) { 
-     LOG_TRACE("(%p, %p)", mat, A); 
-   
-     BrMatrix23Mul(&mattmp1_23, A, mat); 
-     BrMatrix23Copy(mat, &mattmp1_23); 
- } 
-   
- // IDA: void __cdecl BrMatrix23Post(br_matrix23 *mat, br_matrix23 *A) 
- void BrMatrix23Post(br_matrix23* mat, br_matrix23* A) { 
-     LOG_TRACE("(%p, %p)", mat, A); 
-   
-     BrMatrix23Mul(&mattmp1_23, mat, A); 
-     BrMatrix23Copy(mat, &mattmp1_23); 
- } 
-   
- // IDA: void __cdecl BrMatrix23PreRotate(br_matrix23 *mat, br_angle rz) 
- void BrMatrix23PreRotate(br_matrix23* mat, br_angle rz) { 
-     LOG_TRACE("(%p, %d)", mat, rz); 
-   
-     BrMatrix23Rotate(&mattmp2_23, rz); 
-     BrMatrix23Mul(&mattmp1_23, &mattmp2_23, mat); 
-     BrMatrix23Copy(mat, &mattmp1_23); 
- } 
-   
- // IDA: void __cdecl BrMatrix23PostRotate(br_matrix23 *mat, br_angle rz) 
- void BrMatrix23PostRotate(br_matrix23* mat, br_angle rz) { 
-     LOG_TRACE("(%p, %d)", mat, rz); 
-   
-     BrMatrix23Rotate(&mattmp2_23, rz); 
-     BrMatrix23Mul(&mattmp1_23, mat, &mattmp2_23); 
-     BrMatrix23Copy(mat, &mattmp1_23); 
- } 
-   
- // IDA: void __cdecl BrMatrix23PreTranslate(br_matrix23 *mat, br_scalar x, br_scalar y) 
- void BrMatrix23PreTranslate(br_matrix23* mat, br_scalar x, br_scalar y) { 
-     LOG_TRACE("(%p, %f, %f)", mat, x, y); 
-   
-     BrMatrix23Translate(&mattmp2_23, x, y); 
-     BrMatrix23Mul(&mattmp1_23, &mattmp2_23, mat); 
-     BrMatrix23Copy(mat, &mattmp1_23); 
- } 
-   
- // IDA: void __cdecl BrMatrix23PostTranslate(br_matrix23 *A, br_scalar x, br_scalar y) 
- void BrMatrix23PostTranslate(br_matrix23* A, br_scalar x, br_scalar y) { 
-     LOG_TRACE("(%p, %f, %f)", A, x, y); 
-   
-     A(2, 0) += x; 
-     A(2, 1) += y; 
- } 
-   
- // IDA: void __cdecl BrMatrix23PreScale(br_matrix23 *mat, br_scalar sx, br_scalar sy) 
- void BrMatrix23PreScale(br_matrix23* mat, br_scalar sx, br_scalar sy) { 
-     LOG_TRACE("(%p, %f, %f)", mat, sx, sy); 
-   
-     BrMatrix23Scale(&mattmp2_23, sx, sy); 
-     BrMatrix23Mul(&mattmp1_23, &mattmp2_23, mat); 
-     BrMatrix23Copy(mat, &mattmp1_23); 
- } 
-   
- // IDA: void __cdecl BrMatrix23PostScale(br_matrix23 *mat, br_scalar sx, br_scalar sy) 
- void BrMatrix23PostScale(br_matrix23* mat, br_scalar sx, br_scalar sy) { 
-     LOG_TRACE("(%p, %f, %f)", mat, sx, sy); 
-   
-     BrMatrix23Scale(&mattmp2_23, sx, sy); 
-     BrMatrix23Mul(&mattmp1_23, mat, &mattmp2_23); 
-     BrMatrix23Copy(mat, &mattmp1_23); 
- } 
-   
- // IDA: void __cdecl BrMatrix23PreShearX(br_matrix23 *mat, br_scalar sy) 
- void BrMatrix23PreShearX(br_matrix23* mat, br_scalar sy) { 
-     LOG_TRACE("(%p, %f)", mat, sy); 
-   
-     BrMatrix23ShearX(&mattmp2_23, sy); 
-     BrMatrix23Mul(&mattmp1_23, &mattmp2_23, mat); 
-     BrMatrix23Copy(mat, &mattmp1_23); 
- } 
-   
- // IDA: void __cdecl BrMatrix23PostShearX(br_matrix23 *mat, br_scalar sy) 
- void BrMatrix23PostShearX(br_matrix23* mat, br_scalar sy) { 
-     LOG_TRACE("(%p, %f)", mat, sy); 
-   
-     BrMatrix23ShearX(&mattmp2_23, sy); 
-     BrMatrix23Mul(&mattmp1_23, mat, &mattmp2_23); 
-     BrMatrix23Copy(mat, &mattmp1_23); 
- } 
-   
- // IDA: void __cdecl BrMatrix23PreShearY(br_matrix23 *mat, br_scalar sx) 
- void BrMatrix23PreShearY(br_matrix23* mat, br_scalar sx) { 
-     LOG_TRACE("(%p, %f)", mat, sx); 
-   
-     BrMatrix23ShearY(&mattmp2_23, sx); 
-     BrMatrix23Mul(&mattmp1_23, &mattmp2_23, mat); 
-     BrMatrix23Copy(mat, &mattmp1_23); 
- } 
-   
- // IDA: void __cdecl BrMatrix23PostShearY(br_matrix23 *mat, br_scalar sx) 
- void BrMatrix23PostShearY(br_matrix23* mat, br_scalar sx) { 
-     LOG_TRACE("(%p, %f)", mat, sx); 
-   
-     BrMatrix23ShearY(&mattmp2_23, sx); 
-     BrMatrix23Mul(&mattmp1_23, mat, &mattmp2_23); 
-     BrMatrix23Copy(mat, &mattmp1_23); 
- } 
-