Added sse files to implement sse assembly instructions in inline code

This commit is contained in:
Balhau 2018-12-01 22:56:44 +00:00
parent de2c87e56e
commit 2db72850bc
4 changed files with 36 additions and 2 deletions

View file

@ -10,6 +10,7 @@ add_executable(cpplab main.cpp)
add_executable( add_executable(
sse sse
src/core/cpu/sse.cpp
src/core/cpu/naive.cpp src/core/cpu/naive.cpp
src/core/cpu/avx2.cpp src/core/cpu/avx2.cpp
sse.cpp sse.cpp

13
src/core/cpu/sse.cpp Normal file
View file

@ -0,0 +1,13 @@
#include "sse.hpp"
#include <iostream>
//X86 Assembly to add two 128 bit numbers
void core::cpu::SSE::sum_128(int *a,int *b) {
asm(
"movdqa %0, %%xmm1\n"
"paddw %1, %%xmm1\n"
"movdqa %%xmm1, %0"
: "=m"(*a)
: "m"(*b)
);
}

17
src/core/cpu/sse.hpp Normal file
View file

@ -0,0 +1,17 @@
#ifndef CORE_CPU_SSE_H
#define CORE_CPU_SSE_H
using namespace std;
/**
* This will define a set of functions
*/
namespace core {
namespace cpu {
class SSE {
public:
static void sum_128(int *a,int *b);
};
};
};
#endif

View file

@ -3,19 +3,22 @@
#include <iomanip> #include <iomanip>
#include "src/core/cpu/naive.hpp" #include "src/core/cpu/naive.hpp"
#include "src/core/cpu/sse.hpp"
using namespace core::cpu; using namespace core::cpu;
int main(int argc, char** argcv){ int main(int argc, char** argcv){
int v1_128[Naive::LEN_128] = { 0x100, 0x2,0x3,0x4 }; int v1_128[Naive::LEN_128] = { 0x1, 0x2,0x3,0x4 };
int v2_128[Naive::LEN_128] = { 0x10, 0x2,0x3,0x4 }; int v2_128[Naive::LEN_128] = { 0x1, 0x2,0x3,0x4 };
Naive::print(v1_128,Naive::LEN_128); Naive::print(v1_128,Naive::LEN_128);
Naive::print(v2_128,Naive::LEN_128); Naive::print(v2_128,Naive::LEN_128);
Naive::sum_128_long(v1_128,v2_128); Naive::sum_128_long(v1_128,v2_128);
SSE::sum_128(v1_128,v2_128);
Naive::print(v1_128,Naive::LEN_128); Naive::print(v1_128,Naive::LEN_128);
Naive::print(v2_128,Naive::LEN_128); Naive::print(v2_128,Naive::LEN_128);
} }