Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Functions
simd_float_capabilities.cpp File Reference
#include "src/base/SkVx.h"
#include <emscripten.h>
#include <stdio.h>

Go to the source code of this file.

Functions

int main ()
 

Function Documentation

◆ main()

int main ( )

Definition at line 33 of file simd_float_capabilities.cpp.

33 {
34 auto vec1 = skvx::Vec<4, float>({11.f, -22.f, 33.f, -44.f});
35 auto vec2 = skvx::Vec<4, float>({-.5f, 100.5f, 100.5f, -.5f});
36
37 //auto vec3 = skvx::join(vec1, vec2); //not available in wasm
38 // note: may be possible using "widening"
39
40 //vec1 = vec1 + vec2; //GOOD
41 //vec1 = vec1 - vec2; //GOOD
42 //vec1 = vec1 * vec2; //GOOD
43 //vec1 = vec1 / vec2; //GOOD
44
45 //vec1 = vec1 ^ vec2; //N/A
46 //vec1 = vec1 & vec2; //N/A
47 //vec1 = vec1 | vec2; //N/A
48
49 //vec1 = !vec1; //N/A
50 //vec1 = -vec1; //GOOD
51 //vec1 = ~vec1; //N/A
52
53 //vec1 = vec1 << 2; //N/A
54 //vec1 = vec1 >> 2; //N/A
55
56 //auto vec3 = vec1 == vec2; //GOOD
57 //auto vec3 = vec1 != vec2; //GOOD
58 //auto vec3 = vec1 <= vec2; //GOOD
59 //auto vec3 = vec1 >= vec2; //GOOD
60 //auto vec3 = vec1 < vec2; //GOOD
61 //auto vec3 = vec1 > vec2; //GOOD
62
63 //auto vec3 = skvx::any(vec1); //N/A
64 //auto vec3 = skvx::all(vec1); //N/A
65
66 //vec1 = skvx::max(vec1, vec2); //GOOD (FIXED)
67 //vec1 = skvx::min(vec1, vec2); //GOOD (FIXED)
68
69 //vec1 = skvx::pow(vec1, vec2); //not available in wasm
70 //vec1 = skvx::atan(vec1); //not available in wasm
71 //vec1 = ceil(vec1); //not available in wasm, note: maybe could use "comparisons"
72 //vec1 = skvx::floor(vec1); //not available in wasm
73 //vec1 = skvx::trunc(vec1); //not available in wasm
74 // note: maybe possible using trunc_sat_f32x4_s and convert_i32x4_s?
75 //vec1 = skvx::round(vec1); //not available in wasm
76 // note: maybe possible using trunc_sat_f32x4_s and convert_i32x4_s?
77 //vec1 = skvx::sqrt(vec1); //GOOD (FIXED)
78 //vec1 = skvx::abs(vec1); //GOOD (FIXED)
79 //vec1 = skvx::sin(vec1); //not available in wasm
80 //vec1 = skvx::cos(vec1); //not available in wasm
81 //vec1 = skvx::tan(vec1); //not available in wasm
82
83 //auto vec3 = skvx::lrint(vec1); //???
84 // note: may be possible using f32x4.convert_i32x4_s, would need to test correctness.
85
86 //vec1 = skvx::rcp(vec1); //GOOD (FIXED) previous: N/A-BAD, doesn't use SIMD div
87 //vec1 = skvx::rsqrt(vec1); //GOOD (FIXED) previous: BAD, doesn't use SIMD sqrt or div
88
89 //vec1 = skvx::if_then_else(vec1, vec1, vec2); //N/A
90
91 //vec1 = skvx::shuffle<2,1,0,3>(vec1); //GOOD
92
93 //vec1 = skvx::fma(vec1, vec2, vec1); //not available in wasm (no fused multiply-add is available)
94 //vec1 = skvx::fract(vec1); //???
95
96 //printf("result: { %f, %f, %f, %f }\n", vec1[0], vec1[1], vec1[2], vec1[3]);
97
98 return 0;
99}