mirror of
https://github.com/boostorg/context.git
synced 2026-01-19 04:02:17 +00:00
example for SSE
This commit is contained in:
@@ -57,3 +57,7 @@ exe ontop
|
||||
exe throw
|
||||
: throw.cpp
|
||||
;
|
||||
|
||||
exe echosse
|
||||
: echosse.cpp
|
||||
;
|
||||
|
||||
42
example/v2/echosse.cpp
Normal file
42
example/v2/echosse.cpp
Normal file
@@ -0,0 +1,42 @@
|
||||
|
||||
// Copyright Oliver Kowalke 2009.
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
#include <cstddef>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <iostream>
|
||||
#include <emmintrin.h>
|
||||
|
||||
#include <boost/context/all.hpp>
|
||||
|
||||
void echoSSE( int i) {
|
||||
__m128i xmm;
|
||||
xmm = _mm_set_epi32( i, i + 1, i + 2, i + 3);
|
||||
uint32_t v32[4];
|
||||
memcpy( & v32, & xmm, 16);
|
||||
std::cout << v32[0];
|
||||
std::cout << v32[1];
|
||||
std::cout << v32[2];
|
||||
std::cout << v32[3];
|
||||
}
|
||||
|
||||
boost::context::execution_context< int > echo( boost::context::execution_context< int > ctx, int i) {
|
||||
for (;;) {
|
||||
std::cout << i;
|
||||
echoSSE( i);
|
||||
std::cout << " ";
|
||||
std::tie( ctx, i) = ctx( 0);
|
||||
}
|
||||
}
|
||||
|
||||
int main( int argc, char * argv[]) {
|
||||
boost::context::execution_context< int > ctx( echo);
|
||||
for ( int i = 0; i < 10; ++i) {
|
||||
ctx = std::get< 0 >( ctx( i) );
|
||||
}
|
||||
std::cout << "\nDone" << std::endl;
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
Reference in New Issue
Block a user