Question: Complete the Col Major ( Column Major ) code with SIMD using C + + . / / 1 . Vect _ Col _ SIMD.h

Complete the Col Major(Column Major) code with SIMD using C++.
//1. Vect_Col_SIMD.h
#ifndef Vect_Col_SIMD_H
#define Vect_Col_SIMD_H
#include
#include
class Matrix_Col_SIMD;
// Rules:
// No implementation in Header
// No inline keyword
class Vect_Col_SIMD
{
public:
Vect_Col_SIMD()= default;
Vect_Col_SIMD(const Vect_Col_SIMD &tmp)= default;
Vect_Col_SIMD &operator =(const Vect_Col_SIMD &tmp)= default;
~Vect_Col_SIMD()= default;
Vect_Col_SIMD(const float tx, const float ty, const float tz, const float tw);
public:
union
{
__m128_m;
struct
{
float x;
float y;
float z;
float w;
};
};
};
#endif
//--- End of File -----
//2. Vect_Col_SIMD.cpp
#include "Vect_Col_SIMD.h"
Vect_Col_SIMD::Vect_Col_SIMD(const float tx, const float ty, const float tz, const float tw)
: x(tx), y(ty), z(tz), w(tw)
{
}
//--- End of File -------
//3. Matrix_Col_SIMD.h
#ifndef Matrix_Col_SIMD_H
#define Matrix_Col_SIMD_H
#include "Vect_Col_SIMD.h"
// Rules:
// Implement for Col Major
// No implementation in Header
//
// Proxy (optional)
// Proxies are the only thing that can have the keyword "inline"
// inline only for subsitution resolving.. that's it
// No constructors or other operators... only proxy for substituion purpose
// example: (this is allowed)
// inline MM operator *(const Matrix_Col_SIMD &m, const Matrix_Col_SIMD &n)
// No proxy implementation in header
// conversion operator needs to be implemented in CPP file
// proxy constructors are allowed in header (only exception)
class Matrix_Col_SIMD
{
public:
Matrix_Col_SIMD()= default;
Matrix_Col_SIMD(const Matrix_Col_SIMD &tmp)= default;
Matrix_Col_SIMD &operator=(const Matrix_Col_SIMD &tmp)= default;
~Matrix_Col_SIMD()= default;
Matrix_Col_SIMD(const Vect_Col_SIMD &tV0,
const Vect_Col_SIMD &tV1,
const Vect_Col_SIMD &tV2,
const Vect_Col_SIMD &tV3);
Matrix_Col_SIMD operator *(const Matrix_Col_SIMD &n);
Vect_Col_SIMD operator *(const Vect_Col_SIMD &n);
union
{
struct
{
Vect_Col_SIMD v0;
Vect_Col_SIMD v1;
Vect_Col_SIMD v2;
Vect_Col_SIMD v3;
};
struct
{
float m0;
float m1;
float m2;
float m3;
float m4;
float m5;
float m6;
float m7;
float m8;
float m9;
float m10;
float m11;
float m12;
float m13;
float m14;
float m15;
};
};
};
#endif
//--- End of File ---
//4. Matrix_Col_SIMD.cpp
#include "Vect_Col_SIMD.h"
#include "Matrix_Col_SIMD.h"
Matrix_Col_SIMD::Matrix_Col_SIMD(const Vect_Col_SIMD &tV0, const Vect_Col_SIMD &tV1, const Vect_Col_SIMD &tV2, const Vect_Col_SIMD &tV3)
: v0(tV0), v1(tV1), v2(tV2), v3(tV3)
{
}
Vect_Col_SIMD Matrix_Col_SIMD::operator *(const Vect_Col_SIMD &vb)
{
// TODO : fix here
}
Matrix_Col_SIMD Matrix_Col_SIMD::operator *(const Matrix_Col_SIMD &mb)
{
// TODO : fix here
}
//--- End of File -----
Must can pass below test :
Matrix_Col_SIMD Rx(Vect_Col_SIMD(1.000000f,0.000000f,0.000000f,0.000000f),
Vect_Col_SIMD(0.000000f,-0.500000f,-0.866025f,0.000000f),
Vect_Col_SIMD(0.000000f,0.866025f,-0.500000f,0.000000f),
Vect_Col_SIMD(0.000000f,0.000000f,0.000000f,1.000000f));
Matrix_Col_SIMD Ry(Vect_Col_SIMD(0.707107f,0.000000f,0.707107f,0.000000f),
Vect_Col_SIMD(0.000000f,1.000000f,0.000000f,0.000000f),
Vect_Col_SIMD(-0.707107f,0.000000f,0.707107f,0.000000f),
Vect_Col_SIMD(0.000000f,0.000000f,0.000000f,1.000000f));
Matrix_Col_SIMD Rz(Vect_Col_SIMD(0.500000f,0.866025f,0.000000f,0.000000f),
Vect_Col_SIMD(-0.866025f,0.500000f,0.000000f,0.000000f),
Vect_Col_SIMD(0.000000f,0.000000f,1.000000f,0.000000f),
Vect_Col_SIMD(0.000000f,0.000000f,0.000000f,1.000000f));
Matrix_Col_SIMD T(Vect_Col_SIMD(1.000000f,0.000000f,0.000000f,4.000000f),
Vect_Col_SIMD(0.000000f,1.000000f,0.000000f,5.000000f),
Vect_Col_SIMD(0.000000f,0.0

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!