00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef _MMINTRIN_H_INCLUDED
00028 #define _MMINTRIN_H_INCLUDED
00029
00030
00031 typedef unsigned long long __m64, __int64;
00032
00033
00034 typedef int __v2si __attribute__ ((vector_size (8)));
00035 typedef short __v4hi __attribute__ ((vector_size (8)));
00036 typedef char __v8qi __attribute__ ((vector_size (8)));
00037
00038
00039 static __inline __m64
00040 _mm_cvtsi64_m64 (__int64 __i)
00041 {
00042 return __i;
00043 }
00044
00045 static __inline __int64
00046 _mm_cvtm64_si64 (__m64 __i)
00047 {
00048 return __i;
00049 }
00050
00051 static __inline int
00052 _mm_cvtsi64_si32 (__int64 __i)
00053 {
00054 return __i;
00055 }
00056
00057 static __inline __int64
00058 _mm_cvtsi32_si64 (int __i)
00059 {
00060 return __i;
00061 }
00062
00063
00064
00065
00066 static __inline __m64
00067 _mm_packs_pi16 (__m64 __m1, __m64 __m2)
00068 {
00069 return (__m64) __builtin_arm_wpackhss ((__v4hi)__m1, (__v4hi)__m2);
00070 }
00071
00072
00073
00074
00075 static __inline __m64
00076 _mm_packs_pi32 (__m64 __m1, __m64 __m2)
00077 {
00078 return (__m64) __builtin_arm_wpackwss ((__v2si)__m1, (__v2si)__m2);
00079 }
00080
00081
00082
00083
00084 static __inline __m64
00085 _mm_packs_pi64 (__m64 __m1, __m64 __m2)
00086 {
00087 return (__m64) __builtin_arm_wpackdss ((long long)__m1, (long long)__m2);
00088 }
00089
00090
00091
00092
00093 static __inline __m64
00094 _mm_packs_pu16 (__m64 __m1, __m64 __m2)
00095 {
00096 return (__m64) __builtin_arm_wpackhus ((__v4hi)__m1, (__v4hi)__m2);
00097 }
00098
00099
00100
00101
00102 static __inline __m64
00103 _mm_packs_pu32 (__m64 __m1, __m64 __m2)
00104 {
00105 return (__m64) __builtin_arm_wpackwus ((__v2si)__m1, (__v2si)__m2);
00106 }
00107
00108
00109
00110
00111 static __inline __m64
00112 _mm_packs_pu64 (__m64 __m1, __m64 __m2)
00113 {
00114 return (__m64) __builtin_arm_wpackdus ((long long)__m1, (long long)__m2);
00115 }
00116
00117
00118
00119 static __inline __m64
00120 _mm_unpackhi_pi8 (__m64 __m1, __m64 __m2)
00121 {
00122 return (__m64) __builtin_arm_wunpckihb ((__v8qi)__m1, (__v8qi)__m2);
00123 }
00124
00125
00126
00127 static __inline __m64
00128 _mm_unpackhi_pi16 (__m64 __m1, __m64 __m2)
00129 {
00130 return (__m64) __builtin_arm_wunpckihh ((__v4hi)__m1, (__v4hi)__m2);
00131 }
00132
00133
00134
00135 static __inline __m64
00136 _mm_unpackhi_pi32 (__m64 __m1, __m64 __m2)
00137 {
00138 return (__m64) __builtin_arm_wunpckihw ((__v2si)__m1, (__v2si)__m2);
00139 }
00140
00141
00142
00143 static __inline __m64
00144 _mm_unpacklo_pi8 (__m64 __m1, __m64 __m2)
00145 {
00146 return (__m64) __builtin_arm_wunpckilb ((__v8qi)__m1, (__v8qi)__m2);
00147 }
00148
00149
00150
00151 static __inline __m64
00152 _mm_unpacklo_pi16 (__m64 __m1, __m64 __m2)
00153 {
00154 return (__m64) __builtin_arm_wunpckilh ((__v4hi)__m1, (__v4hi)__m2);
00155 }
00156
00157
00158
00159 static __inline __m64
00160 _mm_unpacklo_pi32 (__m64 __m1, __m64 __m2)
00161 {
00162 return (__m64) __builtin_arm_wunpckilw ((__v2si)__m1, (__v2si)__m2);
00163 }
00164
00165
00166
00167 static __inline __m64
00168 _mm_unpackel_pi8 (__m64 __m1)
00169 {
00170 return (__m64) __builtin_arm_wunpckelsb ((__v8qi)__m1);
00171 }
00172
00173
00174
00175 static __inline __m64
00176 _mm_unpackel_pi16 (__m64 __m1)
00177 {
00178 return (__m64) __builtin_arm_wunpckelsh ((__v4hi)__m1);
00179 }
00180
00181
00182
00183 static __inline __m64
00184 _mm_unpackel_pi32 (__m64 __m1)
00185 {
00186 return (__m64) __builtin_arm_wunpckelsw ((__v2si)__m1);
00187 }
00188
00189
00190
00191 static __inline __m64
00192 _mm_unpackeh_pi8 (__m64 __m1)
00193 {
00194 return (__m64) __builtin_arm_wunpckehsb ((__v8qi)__m1);
00195 }
00196
00197
00198
00199 static __inline __m64
00200 _mm_unpackeh_pi16 (__m64 __m1)
00201 {
00202 return (__m64) __builtin_arm_wunpckehsh ((__v4hi)__m1);
00203 }
00204
00205
00206
00207 static __inline __m64
00208 _mm_unpackeh_pi32 (__m64 __m1)
00209 {
00210 return (__m64) __builtin_arm_wunpckehsw ((__v2si)__m1);
00211 }
00212
00213
00214
00215 static __inline __m64
00216 _mm_unpackel_pu8 (__m64 __m1)
00217 {
00218 return (__m64) __builtin_arm_wunpckelub ((__v8qi)__m1);
00219 }
00220
00221
00222
00223 static __inline __m64
00224 _mm_unpackel_pu16 (__m64 __m1)
00225 {
00226 return (__m64) __builtin_arm_wunpckeluh ((__v4hi)__m1);
00227 }
00228
00229
00230
00231 static __inline __m64
00232 _mm_unpackel_pu32 (__m64 __m1)
00233 {
00234 return (__m64) __builtin_arm_wunpckeluw ((__v2si)__m1);
00235 }
00236
00237
00238
00239 static __inline __m64
00240 _mm_unpackeh_pu8 (__m64 __m1)
00241 {
00242 return (__m64) __builtin_arm_wunpckehub ((__v8qi)__m1);
00243 }
00244
00245
00246
00247 static __inline __m64
00248 _mm_unpackeh_pu16 (__m64 __m1)
00249 {
00250 return (__m64) __builtin_arm_wunpckehuh ((__v4hi)__m1);
00251 }
00252
00253
00254
00255 static __inline __m64
00256 _mm_unpackeh_pu32 (__m64 __m1)
00257 {
00258 return (__m64) __builtin_arm_wunpckehuw ((__v2si)__m1);
00259 }
00260
00261
00262 static __inline __m64
00263 _mm_add_pi8 (__m64 __m1, __m64 __m2)
00264 {
00265 return (__m64) __builtin_arm_waddb ((__v8qi)__m1, (__v8qi)__m2);
00266 }
00267
00268
00269 static __inline __m64
00270 _mm_add_pi16 (__m64 __m1, __m64 __m2)
00271 {
00272 return (__m64) __builtin_arm_waddh ((__v4hi)__m1, (__v4hi)__m2);
00273 }
00274
00275
00276 static __inline __m64
00277 _mm_add_pi32 (__m64 __m1, __m64 __m2)
00278 {
00279 return (__m64) __builtin_arm_waddw ((__v2si)__m1, (__v2si)__m2);
00280 }
00281
00282
00283
00284 static __inline __m64
00285 _mm_adds_pi8 (__m64 __m1, __m64 __m2)
00286 {
00287 return (__m64) __builtin_arm_waddbss ((__v8qi)__m1, (__v8qi)__m2);
00288 }
00289
00290
00291
00292 static __inline __m64
00293 _mm_adds_pi16 (__m64 __m1, __m64 __m2)
00294 {
00295 return (__m64) __builtin_arm_waddhss ((__v4hi)__m1, (__v4hi)__m2);
00296 }
00297
00298
00299
00300 static __inline __m64
00301 _mm_adds_pi32 (__m64 __m1, __m64 __m2)
00302 {
00303 return (__m64) __builtin_arm_waddwss ((__v2si)__m1, (__v2si)__m2);
00304 }
00305
00306
00307
00308 static __inline __m64
00309 _mm_adds_pu8 (__m64 __m1, __m64 __m2)
00310 {
00311 return (__m64) __builtin_arm_waddbus ((__v8qi)__m1, (__v8qi)__m2);
00312 }
00313
00314
00315
00316 static __inline __m64
00317 _mm_adds_pu16 (__m64 __m1, __m64 __m2)
00318 {
00319 return (__m64) __builtin_arm_waddhus ((__v4hi)__m1, (__v4hi)__m2);
00320 }
00321
00322
00323
00324 static __inline __m64
00325 _mm_adds_pu32 (__m64 __m1, __m64 __m2)
00326 {
00327 return (__m64) __builtin_arm_waddwus ((__v2si)__m1, (__v2si)__m2);
00328 }
00329
00330
00331 static __inline __m64
00332 _mm_sub_pi8 (__m64 __m1, __m64 __m2)
00333 {
00334 return (__m64) __builtin_arm_wsubb ((__v8qi)__m1, (__v8qi)__m2);
00335 }
00336
00337
00338 static __inline __m64
00339 _mm_sub_pi16 (__m64 __m1, __m64 __m2)
00340 {
00341 return (__m64) __builtin_arm_wsubh ((__v4hi)__m1, (__v4hi)__m2);
00342 }
00343
00344
00345 static __inline __m64
00346 _mm_sub_pi32 (__m64 __m1, __m64 __m2)
00347 {
00348 return (__m64) __builtin_arm_wsubw ((__v2si)__m1, (__v2si)__m2);
00349 }
00350
00351
00352
00353 static __inline __m64
00354 _mm_subs_pi8 (__m64 __m1, __m64 __m2)
00355 {
00356 return (__m64) __builtin_arm_wsubbss ((__v8qi)__m1, (__v8qi)__m2);
00357 }
00358
00359
00360
00361 static __inline __m64
00362 _mm_subs_pi16 (__m64 __m1, __m64 __m2)
00363 {
00364 return (__m64) __builtin_arm_wsubhss ((__v4hi)__m1, (__v4hi)__m2);
00365 }
00366
00367
00368
00369 static __inline __m64
00370 _mm_subs_pi32 (__m64 __m1, __m64 __m2)
00371 {
00372 return (__m64) __builtin_arm_wsubwss ((__v2si)__m1, (__v2si)__m2);
00373 }
00374
00375
00376
00377 static __inline __m64
00378 _mm_subs_pu8 (__m64 __m1, __m64 __m2)
00379 {
00380 return (__m64) __builtin_arm_wsubbus ((__v8qi)__m1, (__v8qi)__m2);
00381 }
00382
00383
00384
00385 static __inline __m64
00386 _mm_subs_pu16 (__m64 __m1, __m64 __m2)
00387 {
00388 return (__m64) __builtin_arm_wsubhus ((__v4hi)__m1, (__v4hi)__m2);
00389 }
00390
00391
00392
00393 static __inline __m64
00394 _mm_subs_pu32 (__m64 __m1, __m64 __m2)
00395 {
00396 return (__m64) __builtin_arm_wsubwus ((__v2si)__m1, (__v2si)__m2);
00397 }
00398
00399
00400
00401
00402 static __inline __m64
00403 _mm_madd_pi16 (__m64 __m1, __m64 __m2)
00404 {
00405 return (__m64) __builtin_arm_wmadds ((__v4hi)__m1, (__v4hi)__m2);
00406 }
00407
00408
00409
00410
00411 static __inline __m64
00412 _mm_madd_pu16 (__m64 __m1, __m64 __m2)
00413 {
00414 return (__m64) __builtin_arm_wmaddu ((__v4hi)__m1, (__v4hi)__m2);
00415 }
00416
00417
00418
00419 static __inline __m64
00420 _mm_mulhi_pi16 (__m64 __m1, __m64 __m2)
00421 {
00422 return (__m64) __builtin_arm_wmulsm ((__v4hi)__m1, (__v4hi)__m2);
00423 }
00424
00425
00426
00427 static __inline __m64
00428 _mm_mulhi_pu16 (__m64 __m1, __m64 __m2)
00429 {
00430 return (__m64) __builtin_arm_wmulum ((__v4hi)__m1, (__v4hi)__m2);
00431 }
00432
00433
00434
00435 static __inline __m64
00436 _mm_mullo_pi16 (__m64 __m1, __m64 __m2)
00437 {
00438 return (__m64) __builtin_arm_wmulul ((__v4hi)__m1, (__v4hi)__m2);
00439 }
00440
00441
00442 static __inline __m64
00443 _mm_sll_pi16 (__m64 __m, __m64 __count)
00444 {
00445 return (__m64) __builtin_arm_wsllh ((__v4hi)__m, __count);
00446 }
00447
00448 static __inline __m64
00449 _mm_slli_pi16 (__m64 __m, int __count)
00450 {
00451 return (__m64) __builtin_arm_wsllhi ((__v4hi)__m, __count);
00452 }
00453
00454
00455 static __inline __m64
00456 _mm_sll_pi32 (__m64 __m, __m64 __count)
00457 {
00458 return (__m64) __builtin_arm_wsllw ((__v2si)__m, __count);
00459 }
00460
00461 static __inline __m64
00462 _mm_slli_pi32 (__m64 __m, int __count)
00463 {
00464 return (__m64) __builtin_arm_wsllwi ((__v2si)__m, __count);
00465 }
00466
00467
00468 static __inline __m64
00469 _mm_sll_si64 (__m64 __m, __m64 __count)
00470 {
00471 return (__m64) __builtin_arm_wslld (__m, __count);
00472 }
00473
00474 static __inline __m64
00475 _mm_slli_si64 (__m64 __m, int __count)
00476 {
00477 return (__m64) __builtin_arm_wslldi (__m, __count);
00478 }
00479
00480
00481 static __inline __m64
00482 _mm_sra_pi16 (__m64 __m, __m64 __count)
00483 {
00484 return (__m64) __builtin_arm_wsrah ((__v4hi)__m, __count);
00485 }
00486
00487 static __inline __m64
00488 _mm_srai_pi16 (__m64 __m, int __count)
00489 {
00490 return (__m64) __builtin_arm_wsrahi ((__v4hi)__m, __count);
00491 }
00492
00493
00494 static __inline __m64
00495 _mm_sra_pi32 (__m64 __m, __m64 __count)
00496 {
00497 return (__m64) __builtin_arm_wsraw ((__v2si)__m, __count);
00498 }
00499
00500 static __inline __m64
00501 _mm_srai_pi32 (__m64 __m, int __count)
00502 {
00503 return (__m64) __builtin_arm_wsrawi ((__v2si)__m, __count);
00504 }
00505
00506
00507 static __inline __m64
00508 _mm_sra_si64 (__m64 __m, __m64 __count)
00509 {
00510 return (__m64) __builtin_arm_wsrad (__m, __count);
00511 }
00512
00513 static __inline __m64
00514 _mm_srai_si64 (__m64 __m, int __count)
00515 {
00516 return (__m64) __builtin_arm_wsradi (__m, __count);
00517 }
00518
00519
00520 static __inline __m64
00521 _mm_srl_pi16 (__m64 __m, __m64 __count)
00522 {
00523 return (__m64) __builtin_arm_wsrlh ((__v4hi)__m, __count);
00524 }
00525
00526 static __inline __m64
00527 _mm_srli_pi16 (__m64 __m, int __count)
00528 {
00529 return (__m64) __builtin_arm_wsrlhi ((__v4hi)__m, __count);
00530 }
00531
00532
00533 static __inline __m64
00534 _mm_srl_pi32 (__m64 __m, __m64 __count)
00535 {
00536 return (__m64) __builtin_arm_wsrlw ((__v2si)__m, __count);
00537 }
00538
00539 static __inline __m64
00540 _mm_srli_pi32 (__m64 __m, int __count)
00541 {
00542 return (__m64) __builtin_arm_wsrlwi ((__v2si)__m, __count);
00543 }
00544
00545
00546 static __inline __m64
00547 _mm_srl_si64 (__m64 __m, __m64 __count)
00548 {
00549 return (__m64) __builtin_arm_wsrld (__m, __count);
00550 }
00551
00552 static __inline __m64
00553 _mm_srli_si64 (__m64 __m, int __count)
00554 {
00555 return (__m64) __builtin_arm_wsrldi (__m, __count);
00556 }
00557
00558
00559 static __inline __m64
00560 _mm_ror_pi16 (__m64 __m, __m64 __count)
00561 {
00562 return (__m64) __builtin_arm_wrorh ((__v4hi)__m, __count);
00563 }
00564
00565 static __inline __m64
00566 _mm_rori_pi16 (__m64 __m, int __count)
00567 {
00568 return (__m64) __builtin_arm_wrorhi ((__v4hi)__m, __count);
00569 }
00570
00571
00572 static __inline __m64
00573 _mm_ror_pi32 (__m64 __m, __m64 __count)
00574 {
00575 return (__m64) __builtin_arm_wrorw ((__v2si)__m, __count);
00576 }
00577
00578 static __inline __m64
00579 _mm_rori_pi32 (__m64 __m, int __count)
00580 {
00581 return (__m64) __builtin_arm_wrorwi ((__v2si)__m, __count);
00582 }
00583
00584
00585 static __inline __m64
00586 _mm_ror_si64 (__m64 __m, __m64 __count)
00587 {
00588 return (__m64) __builtin_arm_wrord (__m, __count);
00589 }
00590
00591 static __inline __m64
00592 _mm_rori_si64 (__m64 __m, int __count)
00593 {
00594 return (__m64) __builtin_arm_wrordi (__m, __count);
00595 }
00596
00597
00598 static __inline __m64
00599 _mm_and_si64 (__m64 __m1, __m64 __m2)
00600 {
00601 return __builtin_arm_wand (__m1, __m2);
00602 }
00603
00604
00605
00606 static __inline __m64
00607 _mm_andnot_si64 (__m64 __m1, __m64 __m2)
00608 {
00609 return __builtin_arm_wandn (__m1, __m2);
00610 }
00611
00612
00613 static __inline __m64
00614 _mm_or_si64 (__m64 __m1, __m64 __m2)
00615 {
00616 return __builtin_arm_wor (__m1, __m2);
00617 }
00618
00619
00620 static __inline __m64
00621 _mm_xor_si64 (__m64 __m1, __m64 __m2)
00622 {
00623 return __builtin_arm_wxor (__m1, __m2);
00624 }
00625
00626
00627
00628 static __inline __m64
00629 _mm_cmpeq_pi8 (__m64 __m1, __m64 __m2)
00630 {
00631 return (__m64) __builtin_arm_wcmpeqb ((__v8qi)__m1, (__v8qi)__m2);
00632 }
00633
00634 static __inline __m64
00635 _mm_cmpgt_pi8 (__m64 __m1, __m64 __m2)
00636 {
00637 return (__m64) __builtin_arm_wcmpgtsb ((__v8qi)__m1, (__v8qi)__m2);
00638 }
00639
00640 static __inline __m64
00641 _mm_cmpgt_pu8 (__m64 __m1, __m64 __m2)
00642 {
00643 return (__m64) __builtin_arm_wcmpgtub ((__v8qi)__m1, (__v8qi)__m2);
00644 }
00645
00646
00647
00648 static __inline __m64
00649 _mm_cmpeq_pi16 (__m64 __m1, __m64 __m2)
00650 {
00651 return (__m64) __builtin_arm_wcmpeqh ((__v4hi)__m1, (__v4hi)__m2);
00652 }
00653
00654 static __inline __m64
00655 _mm_cmpgt_pi16 (__m64 __m1, __m64 __m2)
00656 {
00657 return (__m64) __builtin_arm_wcmpgtsh ((__v4hi)__m1, (__v4hi)__m2);
00658 }
00659
00660 static __inline __m64
00661 _mm_cmpgt_pu16 (__m64 __m1, __m64 __m2)
00662 {
00663 return (__m64) __builtin_arm_wcmpgtuh ((__v4hi)__m1, (__v4hi)__m2);
00664 }
00665
00666
00667
00668 static __inline __m64
00669 _mm_cmpeq_pi32 (__m64 __m1, __m64 __m2)
00670 {
00671 return (__m64) __builtin_arm_wcmpeqw ((__v2si)__m1, (__v2si)__m2);
00672 }
00673
00674 static __inline __m64
00675 _mm_cmpgt_pi32 (__m64 __m1, __m64 __m2)
00676 {
00677 return (__m64) __builtin_arm_wcmpgtsw ((__v2si)__m1, (__v2si)__m2);
00678 }
00679
00680 static __inline __m64
00681 _mm_cmpgt_pu32 (__m64 __m1, __m64 __m2)
00682 {
00683 return (__m64) __builtin_arm_wcmpgtuw ((__v2si)__m1, (__v2si)__m2);
00684 }
00685
00686
00687
00688 static __inline __m64
00689 _mm_mac_pu16 (__m64 __A, __m64 __B, __m64 __C)
00690 {
00691 return __builtin_arm_wmacu (__A, (__v4hi)__B, (__v4hi)__C);
00692 }
00693
00694
00695
00696 static __inline __m64
00697 _mm_mac_pi16 (__m64 __A, __m64 __B, __m64 __C)
00698 {
00699 return __builtin_arm_wmacs (__A, (__v4hi)__B, (__v4hi)__C);
00700 }
00701
00702
00703
00704 static __inline __m64
00705 _mm_macz_pu16 (__m64 __A, __m64 __B)
00706 {
00707 return __builtin_arm_wmacuz ((__v4hi)__A, (__v4hi)__B);
00708 }
00709
00710
00711
00712 static __inline __m64
00713 _mm_macz_pi16 (__m64 __A, __m64 __B)
00714 {
00715 return __builtin_arm_wmacsz ((__v4hi)__A, (__v4hi)__B);
00716 }
00717
00718
00719 static __inline __m64
00720 _mm_acc_pu8 (__m64 __A)
00721 {
00722 return __builtin_arm_waccb ((__v8qi)__A);
00723 }
00724
00725
00726 static __inline __m64
00727 _mm_acc_pu16 (__m64 __A)
00728 {
00729 return __builtin_arm_wacch ((__v4hi)__A);
00730 }
00731
00732
00733 static __inline __m64
00734 _mm_acc_pu32 (__m64 __A)
00735 {
00736 return __builtin_arm_waccw ((__v2si)__A);
00737 }
00738
00739 static __inline __m64
00740 _mm_mia_si64 (__m64 __A, int __B, int __C)
00741 {
00742 return __builtin_arm_tmia (__A, __B, __C);
00743 }
00744
00745 static __inline __m64
00746 _mm_miaph_si64 (__m64 __A, int __B, int __C)
00747 {
00748 return __builtin_arm_tmiaph (__A, __B, __C);
00749 }
00750
00751 static __inline __m64
00752 _mm_miabb_si64 (__m64 __A, int __B, int __C)
00753 {
00754 return __builtin_arm_tmiabb (__A, __B, __C);
00755 }
00756
00757 static __inline __m64
00758 _mm_miabt_si64 (__m64 __A, int __B, int __C)
00759 {
00760 return __builtin_arm_tmiabt (__A, __B, __C);
00761 }
00762
00763 static __inline __m64
00764 _mm_miatb_si64 (__m64 __A, int __B, int __C)
00765 {
00766 return __builtin_arm_tmiatb (__A, __B, __C);
00767 }
00768
00769 static __inline __m64
00770 _mm_miatt_si64 (__m64 __A, int __B, int __C)
00771 {
00772 return __builtin_arm_tmiatt (__A, __B, __C);
00773 }
00774
00775
00776
00777 #define _mm_extract_pi8(A, N) __builtin_arm_textrmsb ((__v8qi)(A), (N))
00778 #define _mm_extract_pi16(A, N) __builtin_arm_textrmsh ((__v4hi)(A), (N))
00779 #define _mm_extract_pi32(A, N) __builtin_arm_textrmsw ((__v2si)(A), (N))
00780
00781
00782
00783 #define _mm_extract_pu8(A, N) __builtin_arm_textrmub ((__v8qi)(A), (N))
00784 #define _mm_extract_pu16(A, N) __builtin_arm_textrmuh ((__v4hi)(A), (N))
00785 #define _mm_extract_pu32(A, N) __builtin_arm_textrmuw ((__v2si)(A), (N))
00786
00787
00788
00789 #define _mm_insert_pi8(A, D, N) \
00790 ((__m64) __builtin_arm_tinsrb ((__v8qi)(A), (D), (N)))
00791 #define _mm_insert_pi16(A, D, N) \
00792 ((__m64) __builtin_arm_tinsrh ((__v4hi)(A), (D), (N)))
00793 #define _mm_insert_pi32(A, D, N) \
00794 ((__m64) __builtin_arm_tinsrw ((__v2si)(A), (D), (N)))
00795
00796
00797 static __inline __m64
00798 _mm_max_pi8 (__m64 __A, __m64 __B)
00799 {
00800 return (__m64) __builtin_arm_wmaxsb ((__v8qi)__A, (__v8qi)__B);
00801 }
00802
00803
00804 static __inline __m64
00805 _mm_max_pi16 (__m64 __A, __m64 __B)
00806 {
00807 return (__m64) __builtin_arm_wmaxsh ((__v4hi)__A, (__v4hi)__B);
00808 }
00809
00810
00811 static __inline __m64
00812 _mm_max_pi32 (__m64 __A, __m64 __B)
00813 {
00814 return (__m64) __builtin_arm_wmaxsw ((__v2si)__A, (__v2si)__B);
00815 }
00816
00817
00818 static __inline __m64
00819 _mm_max_pu8 (__m64 __A, __m64 __B)
00820 {
00821 return (__m64) __builtin_arm_wmaxub ((__v8qi)__A, (__v8qi)__B);
00822 }
00823
00824
00825 static __inline __m64
00826 _mm_max_pu16 (__m64 __A, __m64 __B)
00827 {
00828 return (__m64) __builtin_arm_wmaxuh ((__v4hi)__A, (__v4hi)__B);
00829 }
00830
00831
00832 static __inline __m64
00833 _mm_max_pu32 (__m64 __A, __m64 __B)
00834 {
00835 return (__m64) __builtin_arm_wmaxuw ((__v2si)__A, (__v2si)__B);
00836 }
00837
00838
00839 static __inline __m64
00840 _mm_min_pi8 (__m64 __A, __m64 __B)
00841 {
00842 return (__m64) __builtin_arm_wminsb ((__v8qi)__A, (__v8qi)__B);
00843 }
00844
00845
00846 static __inline __m64
00847 _mm_min_pi16 (__m64 __A, __m64 __B)
00848 {
00849 return (__m64) __builtin_arm_wminsh ((__v4hi)__A, (__v4hi)__B);
00850 }
00851
00852
00853 static __inline __m64
00854 _mm_min_pi32 (__m64 __A, __m64 __B)
00855 {
00856 return (__m64) __builtin_arm_wminsw ((__v2si)__A, (__v2si)__B);
00857 }
00858
00859
00860 static __inline __m64
00861 _mm_min_pu8 (__m64 __A, __m64 __B)
00862 {
00863 return (__m64) __builtin_arm_wminub ((__v8qi)__A, (__v8qi)__B);
00864 }
00865
00866
00867 static __inline __m64
00868 _mm_min_pu16 (__m64 __A, __m64 __B)
00869 {
00870 return (__m64) __builtin_arm_wminuh ((__v4hi)__A, (__v4hi)__B);
00871 }
00872
00873
00874 static __inline __m64
00875 _mm_min_pu32 (__m64 __A, __m64 __B)
00876 {
00877 return (__m64) __builtin_arm_wminuw ((__v2si)__A, (__v2si)__B);
00878 }
00879
00880
00881 static __inline int
00882 _mm_movemask_pi8 (__m64 __A)
00883 {
00884 return __builtin_arm_tmovmskb ((__v8qi)__A);
00885 }
00886
00887
00888 static __inline int
00889 _mm_movemask_pi16 (__m64 __A)
00890 {
00891 return __builtin_arm_tmovmskh ((__v4hi)__A);
00892 }
00893
00894
00895 static __inline int
00896 _mm_movemask_pi32 (__m64 __A)
00897 {
00898 return __builtin_arm_tmovmskw ((__v2si)__A);
00899 }
00900
00901
00902
00903 #define _mm_shuffle_pi16(A, N) \
00904 ((__m64) __builtin_arm_wshufh ((__v4hi)(A), (N)))
00905
00906
00907
00908 static __inline __m64
00909 _mm_avg_pu8 (__m64 __A, __m64 __B)
00910 {
00911 return (__m64) __builtin_arm_wavg2br ((__v8qi)__A, (__v8qi)__B);
00912 }
00913
00914
00915 static __inline __m64
00916 _mm_avg_pu16 (__m64 __A, __m64 __B)
00917 {
00918 return (__m64) __builtin_arm_wavg2hr ((__v4hi)__A, (__v4hi)__B);
00919 }
00920
00921
00922 static __inline __m64
00923 _mm_avg2_pu8 (__m64 __A, __m64 __B)
00924 {
00925 return (__m64) __builtin_arm_wavg2b ((__v8qi)__A, (__v8qi)__B);
00926 }
00927
00928
00929 static __inline __m64
00930 _mm_avg2_pu16 (__m64 __A, __m64 __B)
00931 {
00932 return (__m64) __builtin_arm_wavg2h ((__v4hi)__A, (__v4hi)__B);
00933 }
00934
00935
00936
00937
00938 static __inline __m64
00939 _mm_sad_pu8 (__m64 __A, __m64 __B)
00940 {
00941 return (__m64) __builtin_arm_wsadb ((__v8qi)__A, (__v8qi)__B);
00942 }
00943
00944
00945
00946
00947 static __inline __m64
00948 _mm_sad_pu16 (__m64 __A, __m64 __B)
00949 {
00950 return (__m64) __builtin_arm_wsadh ((__v4hi)__A, (__v4hi)__B);
00951 }
00952
00953
00954
00955
00956 static __inline __m64
00957 _mm_sadz_pu8 (__m64 __A, __m64 __B)
00958 {
00959 return (__m64) __builtin_arm_wsadbz ((__v8qi)__A, (__v8qi)__B);
00960 }
00961
00962
00963
00964
00965 static __inline __m64
00966 _mm_sadz_pu16 (__m64 __A, __m64 __B)
00967 {
00968 return (__m64) __builtin_arm_wsadhz ((__v4hi)__A, (__v4hi)__B);
00969 }
00970
00971 static __inline __m64
00972 _mm_align_si64 (__m64 __A, __m64 __B, int __C)
00973 {
00974 return (__m64) __builtin_arm_walign ((__v8qi)__A, (__v8qi)__B, __C);
00975 }
00976
00977
00978 static __inline __m64
00979 _mm_setzero_si64 (void)
00980 {
00981 return __builtin_arm_wzero ();
00982 }
00983
00984
00985
00986
00987
00988 static __inline void
00989 _mm_setwcx (const int __value, const int __regno)
00990 {
00991 switch (__regno)
00992 {
00993 case 0: __builtin_arm_setwcx (__value, 0); break;
00994 case 1: __builtin_arm_setwcx (__value, 1); break;
00995 case 2: __builtin_arm_setwcx (__value, 2); break;
00996 case 3: __builtin_arm_setwcx (__value, 3); break;
00997 case 8: __builtin_arm_setwcx (__value, 8); break;
00998 case 9: __builtin_arm_setwcx (__value, 9); break;
00999 case 10: __builtin_arm_setwcx (__value, 10); break;
01000 case 11: __builtin_arm_setwcx (__value, 11); break;
01001 default: break;
01002 }
01003 }
01004
01005 static __inline int
01006 _mm_getwcx (const int __regno)
01007 {
01008 switch (__regno)
01009 {
01010 case 0: return __builtin_arm_getwcx (0);
01011 case 1: return __builtin_arm_getwcx (1);
01012 case 2: return __builtin_arm_getwcx (2);
01013 case 3: return __builtin_arm_getwcx (3);
01014 case 8: return __builtin_arm_getwcx (8);
01015 case 9: return __builtin_arm_getwcx (9);
01016 case 10: return __builtin_arm_getwcx (10);
01017 case 11: return __builtin_arm_getwcx (11);
01018 default: return 0;
01019 }
01020 }
01021
01022
01023 static __inline __m64
01024 _mm_set_pi32 (int __i1, int __i0)
01025 {
01026 union {
01027 __m64 __q;
01028 struct {
01029 unsigned int __i0;
01030 unsigned int __i1;
01031 } __s;
01032 } __u;
01033
01034 __u.__s.__i0 = __i0;
01035 __u.__s.__i1 = __i1;
01036
01037 return __u.__q;
01038 }
01039
01040
01041 static __inline __m64
01042 _mm_set_pi16 (short __w3, short __w2, short __w1, short __w0)
01043 {
01044 unsigned int __i1 = (unsigned short)__w3 << 16 | (unsigned short)__w2;
01045 unsigned int __i0 = (unsigned short)__w1 << 16 | (unsigned short)__w0;
01046 return _mm_set_pi32 (__i1, __i0);
01047
01048 }
01049
01050
01051 static __inline __m64
01052 _mm_set_pi8 (char __b7, char __b6, char __b5, char __b4,
01053 char __b3, char __b2, char __b1, char __b0)
01054 {
01055 unsigned int __i1, __i0;
01056
01057 __i1 = (unsigned char)__b7;
01058 __i1 = __i1 << 8 | (unsigned char)__b6;
01059 __i1 = __i1 << 8 | (unsigned char)__b5;
01060 __i1 = __i1 << 8 | (unsigned char)__b4;
01061
01062 __i0 = (unsigned char)__b3;
01063 __i0 = __i0 << 8 | (unsigned char)__b2;
01064 __i0 = __i0 << 8 | (unsigned char)__b1;
01065 __i0 = __i0 << 8 | (unsigned char)__b0;
01066
01067 return _mm_set_pi32 (__i1, __i0);
01068 }
01069
01070
01071 static __inline __m64
01072 _mm_setr_pi32 (int __i0, int __i1)
01073 {
01074 return _mm_set_pi32 (__i1, __i0);
01075 }
01076
01077 static __inline __m64
01078 _mm_setr_pi16 (short __w0, short __w1, short __w2, short __w3)
01079 {
01080 return _mm_set_pi16 (__w3, __w2, __w1, __w0);
01081 }
01082
01083 static __inline __m64
01084 _mm_setr_pi8 (char __b0, char __b1, char __b2, char __b3,
01085 char __b4, char __b5, char __b6, char __b7)
01086 {
01087 return _mm_set_pi8 (__b7, __b6, __b5, __b4, __b3, __b2, __b1, __b0);
01088 }
01089
01090
01091 static __inline __m64
01092 _mm_set1_pi32 (int __i)
01093 {
01094 return _mm_set_pi32 (__i, __i);
01095 }
01096
01097
01098 static __inline __m64
01099 _mm_set1_pi16 (short __w)
01100 {
01101 unsigned int __i = (unsigned short)__w << 16 | (unsigned short)__w;
01102 return _mm_set1_pi32 (__i);
01103 }
01104
01105
01106 static __inline __m64
01107 _mm_set1_pi8 (char __b)
01108 {
01109 unsigned int __w = (unsigned char)__b << 8 | (unsigned char)__b;
01110 unsigned int __i = __w << 16 | __w;
01111 return _mm_set1_pi32 (__i);
01112 }
01113
01114
01115 static __inline __m64
01116 _m_from_int (int __a)
01117 {
01118 return (__m64)__a;
01119 }
01120
01121 #define _m_packsswb _mm_packs_pi16
01122 #define _m_packssdw _mm_packs_pi32
01123 #define _m_packuswb _mm_packs_pu16
01124 #define _m_packusdw _mm_packs_pu32
01125 #define _m_packssqd _mm_packs_pi64
01126 #define _m_packusqd _mm_packs_pu64
01127 #define _mm_packs_si64 _mm_packs_pi64
01128 #define _mm_packs_su64 _mm_packs_pu64
01129 #define _m_punpckhbw _mm_unpackhi_pi8
01130 #define _m_punpckhwd _mm_unpackhi_pi16
01131 #define _m_punpckhdq _mm_unpackhi_pi32
01132 #define _m_punpcklbw _mm_unpacklo_pi8
01133 #define _m_punpcklwd _mm_unpacklo_pi16
01134 #define _m_punpckldq _mm_unpacklo_pi32
01135 #define _m_punpckehsbw _mm_unpackeh_pi8
01136 #define _m_punpckehswd _mm_unpackeh_pi16
01137 #define _m_punpckehsdq _mm_unpackeh_pi32
01138 #define _m_punpckehubw _mm_unpackeh_pu8
01139 #define _m_punpckehuwd _mm_unpackeh_pu16
01140 #define _m_punpckehudq _mm_unpackeh_pu32
01141 #define _m_punpckelsbw _mm_unpackel_pi8
01142 #define _m_punpckelswd _mm_unpackel_pi16
01143 #define _m_punpckelsdq _mm_unpackel_pi32
01144 #define _m_punpckelubw _mm_unpackel_pu8
01145 #define _m_punpckeluwd _mm_unpackel_pu16
01146 #define _m_punpckeludq _mm_unpackel_pu32
01147 #define _m_paddb _mm_add_pi8
01148 #define _m_paddw _mm_add_pi16
01149 #define _m_paddd _mm_add_pi32
01150 #define _m_paddsb _mm_adds_pi8
01151 #define _m_paddsw _mm_adds_pi16
01152 #define _m_paddsd _mm_adds_pi32
01153 #define _m_paddusb _mm_adds_pu8
01154 #define _m_paddusw _mm_adds_pu16
01155 #define _m_paddusd _mm_adds_pu32
01156 #define _m_psubb _mm_sub_pi8
01157 #define _m_psubw _mm_sub_pi16
01158 #define _m_psubd _mm_sub_pi32
01159 #define _m_psubsb _mm_subs_pi8
01160 #define _m_psubsw _mm_subs_pi16
01161 #define _m_psubuw _mm_subs_pi32
01162 #define _m_psubusb _mm_subs_pu8
01163 #define _m_psubusw _mm_subs_pu16
01164 #define _m_psubusd _mm_subs_pu32
01165 #define _m_pmaddwd _mm_madd_pi16
01166 #define _m_pmadduwd _mm_madd_pu16
01167 #define _m_pmulhw _mm_mulhi_pi16
01168 #define _m_pmulhuw _mm_mulhi_pu16
01169 #define _m_pmullw _mm_mullo_pi16
01170 #define _m_pmacsw _mm_mac_pi16
01171 #define _m_pmacuw _mm_mac_pu16
01172 #define _m_pmacszw _mm_macz_pi16
01173 #define _m_pmacuzw _mm_macz_pu16
01174 #define _m_paccb _mm_acc_pu8
01175 #define _m_paccw _mm_acc_pu16
01176 #define _m_paccd _mm_acc_pu32
01177 #define _m_pmia _mm_mia_si64
01178 #define _m_pmiaph _mm_miaph_si64
01179 #define _m_pmiabb _mm_miabb_si64
01180 #define _m_pmiabt _mm_miabt_si64
01181 #define _m_pmiatb _mm_miatb_si64
01182 #define _m_pmiatt _mm_miatt_si64
01183 #define _m_psllw _mm_sll_pi16
01184 #define _m_psllwi _mm_slli_pi16
01185 #define _m_pslld _mm_sll_pi32
01186 #define _m_pslldi _mm_slli_pi32
01187 #define _m_psllq _mm_sll_si64
01188 #define _m_psllqi _mm_slli_si64
01189 #define _m_psraw _mm_sra_pi16
01190 #define _m_psrawi _mm_srai_pi16
01191 #define _m_psrad _mm_sra_pi32
01192 #define _m_psradi _mm_srai_pi32
01193 #define _m_psraq _mm_sra_si64
01194 #define _m_psraqi _mm_srai_si64
01195 #define _m_psrlw _mm_srl_pi16
01196 #define _m_psrlwi _mm_srli_pi16
01197 #define _m_psrld _mm_srl_pi32
01198 #define _m_psrldi _mm_srli_pi32
01199 #define _m_psrlq _mm_srl_si64
01200 #define _m_psrlqi _mm_srli_si64
01201 #define _m_prorw _mm_ror_pi16
01202 #define _m_prorwi _mm_rori_pi16
01203 #define _m_prord _mm_ror_pi32
01204 #define _m_prordi _mm_rori_pi32
01205 #define _m_prorq _mm_ror_si64
01206 #define _m_prorqi _mm_rori_si64
01207 #define _m_pand _mm_and_si64
01208 #define _m_pandn _mm_andnot_si64
01209 #define _m_por _mm_or_si64
01210 #define _m_pxor _mm_xor_si64
01211 #define _m_pcmpeqb _mm_cmpeq_pi8
01212 #define _m_pcmpeqw _mm_cmpeq_pi16
01213 #define _m_pcmpeqd _mm_cmpeq_pi32
01214 #define _m_pcmpgtb _mm_cmpgt_pi8
01215 #define _m_pcmpgtub _mm_cmpgt_pu8
01216 #define _m_pcmpgtw _mm_cmpgt_pi16
01217 #define _m_pcmpgtuw _mm_cmpgt_pu16
01218 #define _m_pcmpgtd _mm_cmpgt_pi32
01219 #define _m_pcmpgtud _mm_cmpgt_pu32
01220 #define _m_pextrb _mm_extract_pi8
01221 #define _m_pextrw _mm_extract_pi16
01222 #define _m_pextrd _mm_extract_pi32
01223 #define _m_pextrub _mm_extract_pu8
01224 #define _m_pextruw _mm_extract_pu16
01225 #define _m_pextrud _mm_extract_pu32
01226 #define _m_pinsrb _mm_insert_pi8
01227 #define _m_pinsrw _mm_insert_pi16
01228 #define _m_pinsrd _mm_insert_pi32
01229 #define _m_pmaxsb _mm_max_pi8
01230 #define _m_pmaxsw _mm_max_pi16
01231 #define _m_pmaxsd _mm_max_pi32
01232 #define _m_pmaxub _mm_max_pu8
01233 #define _m_pmaxuw _mm_max_pu16
01234 #define _m_pmaxud _mm_max_pu32
01235 #define _m_pminsb _mm_min_pi8
01236 #define _m_pminsw _mm_min_pi16
01237 #define _m_pminsd _mm_min_pi32
01238 #define _m_pminub _mm_min_pu8
01239 #define _m_pminuw _mm_min_pu16
01240 #define _m_pminud _mm_min_pu32
01241 #define _m_pmovmskb _mm_movemask_pi8
01242 #define _m_pmovmskw _mm_movemask_pi16
01243 #define _m_pmovmskd _mm_movemask_pi32
01244 #define _m_pshufw _mm_shuffle_pi16
01245 #define _m_pavgb _mm_avg_pu8
01246 #define _m_pavgw _mm_avg_pu16
01247 #define _m_pavg2b _mm_avg2_pu8
01248 #define _m_pavg2w _mm_avg2_pu16
01249 #define _m_psadbw _mm_sad_pu8
01250 #define _m_psadwd _mm_sad_pu16
01251 #define _m_psadzbw _mm_sadz_pu8
01252 #define _m_psadzwd _mm_sadz_pu16
01253 #define _m_paligniq _mm_align_si64
01254 #define _m_cvt_si2pi _mm_cvtsi64_m64
01255 #define _m_cvt_pi2si _mm_cvtm64_si64
01256
01257 #endif