diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-10-30 10:27:02 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-10-30 10:27:02 -0700 |
commit | 82c96614ab469777da35013e698fa0c8873c231e (patch) | |
tree | 664adb0210c9c43e219fe54866dd0bf521f1bb9f /tests | |
parent | c45cd7c72a019f54b0f6ee873641200ecb043a25 (diff) |
fix missing semicolons on simd load and store
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_core.py | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/test_core.py b/tests/test_core.py index 189da2bc..bed451dd 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -8660,6 +8660,53 @@ void*:16 main = main[:main.find('\n}')] assert main.count('\n') == 7, 'must not emit too many postSets: %d' % main.count('\n') + def test_simd3(self): + if Settings.ASM_JS: Settings.ASM_JS = 2 # does not validate + + self.do_run(r''' + #include <stdio.h> + + typedef float __m128 __attribute__ ((__vector_size__ (16))); + + static inline __m128 __attribute__((always_inline)) + _mm_set_ps(const float __Z, const float __Y, const float __X, const float __W) + { + return (__m128){ __W, __X, __Y, __Z }; + } + + static inline void __attribute__((always_inline)) + _mm_store_ps(float *__P, __m128 __A) + { + *(__m128 *)__P = __A; + } + + static inline __m128 __attribute__((always_inline)) + _mm_add_ps(__m128 __A, __m128 __B) + { + return __A + __B; + } + + using namespace std; + + int main(int argc, char ** argv) { + float __attribute__((__aligned__(16))) ar[4]; + __m128 v1 = _mm_set_ps(9.0, 4.0, 0, -9.0); + __m128 v2 = _mm_set_ps(7.0, 3.0, 2.5, 1.0); + __m128 v3 = _mm_add_ps(v1, v2); + _mm_store_ps(ar, v3); + + for (int i = 0; i < 4; i++) { + printf("%f\n", ar[i]); + } + + return 0; + } + ''', '''-8.000000 +2.500000 +7.000000 +16.000000 +''') + def test_gcc_unmangler(self): Settings.NAMED_GLOBALS = 1 # test coverage for this |