1a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 2a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj/* A program to test that SSE/SSE2 insns do not read memory they 3a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj should not. Covers insns of the form OP %xmm, %xmm and OP memory, 4a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj %xmm only. */ 5a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 6a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj#include <stdio.h> 7a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj#include <stdlib.h> 8a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj#include <assert.h> 983b62cbbab29bde83eba40231f307c2a311e73c8njn#include "tests/malloc.h" 10a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj#include <string.h> 11a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 12a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjtypedef unsigned char V128[16]; 13a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjtypedef unsigned int UInt; 14a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjtypedef signed int Int; 15a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjtypedef unsigned char UChar; 16a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 17a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjtypedef 18a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj struct { 19a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj V128 arg1; 20a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj V128 arg2; 21a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj V128 res; 22a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj } 23a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj RRArgs; 24a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 25a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjtypedef 26a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj struct { 27a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj V128 arg1; 28a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj V128 res; 29a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj } 30a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj RMArgs; 31a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 32a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjstatic UChar randUChar ( void ) 33a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj{ 34a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj static UInt seed = 80021; 35a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj seed = 1103515245 * seed + 12345; 36a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj return (seed >> 17) & 0xFF; 37a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj} 38a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 39a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjstatic void randomise ( UChar* p, Int n ) 40a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj{ 41a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj Int i; 42a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj for (i = 0; i < n; i++) 43a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj p[i] = randUChar(); 44a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj} 45a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 46a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjstatic void randV128 ( V128* v ) 47a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj{ 48a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj Int i; 49a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj for (i = 0; i < 16; i++) 50a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj (*v)[i] = randUChar(); 51a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj} 52a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 53a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjstatic void randRRArgs ( RRArgs* rra ) 54a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj{ 55a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj randV128(&rra->arg1); 56a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj randV128(&rra->arg2); 57a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj randV128(&rra->res); 58a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj} 59a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 60a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjstatic void randRMArgs ( RMArgs* rra ) 61a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj{ 62a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj randV128(&rra->arg1); 63a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj randV128(&rra->res); 64a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj} 65a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 66a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjstatic void showV128 ( V128* v ) 67a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj{ 68a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj Int i; 69a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj for (i = 0; i < 16; i++) 70a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj printf("%02x", (Int)(*v)[i]); 71a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj} 72a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 732de044165d2bff58aca58fec3c3c9e34d949730esewardjstatic void showMaskedV128 ( V128* v, V128* mask ) 742de044165d2bff58aca58fec3c3c9e34d949730esewardj{ 752de044165d2bff58aca58fec3c3c9e34d949730esewardj Int i; 762de044165d2bff58aca58fec3c3c9e34d949730esewardj for (i = 0; i < 16; i++) 772de044165d2bff58aca58fec3c3c9e34d949730esewardj printf("%02x", (Int)( ((*v)[i]) & ((*mask)[i]) )); 782de044165d2bff58aca58fec3c3c9e34d949730esewardj} 792de044165d2bff58aca58fec3c3c9e34d949730esewardj 802de044165d2bff58aca58fec3c3c9e34d949730esewardjstatic void showRR ( char* op, RRArgs* rra, V128* rmask ) 81a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj{ 82a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj printf("r %10s ", op); 83a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj showV128(&rra->arg1); 84a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj printf(" "); 85a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj showV128(&rra->arg2); 86a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj printf(" "); 872de044165d2bff58aca58fec3c3c9e34d949730esewardj showMaskedV128(&rra->res, rmask); 88a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj printf("\n"); 89a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj} 90a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 912de044165d2bff58aca58fec3c3c9e34d949730esewardjstatic void showRM ( char* op, RMArgs* rra, UChar* mem, Int nMem, V128* rmask ) 92a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj{ 93a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj Int i; 94a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj assert(nMem == 4 || nMem == 8 || nMem == 16 || nMem==0); 95a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj printf("m %10s ", op); 96a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj for (i = 0; i < nMem; i++) 97a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj printf("%02x", (Int)mem[i]); 98a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj printf(" "); 99a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj showV128(&rra->arg1); 100a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj printf(" "); 1012de044165d2bff58aca58fec3c3c9e34d949730esewardj showMaskedV128(&rra->res, rmask ); 102a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj printf("\n"); 103a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj} 104a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 105a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj#define Wrapper_RegReg(OP) \ 106a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj void r_r_##OP ( RRArgs* p ) \ 107a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj { \ 108a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj __asm__ __volatile__("\n" \ 109a974276895a76b6e391154c70c80056816996063sewardj "\tmovups 0(%0), %%xmm6\n" \ 110a974276895a76b6e391154c70c80056816996063sewardj "\tmovups 16(%0), %%xmm7\n" \ 111a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj "\t" #OP " %%xmm6, %%xmm7\n" \ 112a974276895a76b6e391154c70c80056816996063sewardj "\tmovups %%xmm7, 32(%0)\n" \ 113a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj : \ 114a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj : "r" (p) \ 115a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj : "memory", "xmm6", "xmm7", "cc" \ 116a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj ); \ 117a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj } 118a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 119a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj#define Wrapper_RegMem(OP) \ 120a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj void r_m_##OP ( RMArgs* p, void* mem ) \ 121a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj { \ 122a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj __asm__ __volatile__("\n" \ 123a974276895a76b6e391154c70c80056816996063sewardj "\tmovups 0(%0), %%xmm7\n" \ 124a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj "\t" #OP " 0(%1), %%xmm7\n" \ 125a974276895a76b6e391154c70c80056816996063sewardj "\tmovups %%xmm7, 16(%0)\n" \ 126a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj : \ 127a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj : "r" (p), "r" (mem) \ 128a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj : "memory", "xmm7", "cc" \ 129a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj ); \ 130a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj } 131a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 132a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 1332de044165d2bff58aca58fec3c3c9e34d949730esewardj#define TEST_INSN(res_mask,mem_size,insn) \ 134a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj \ 135a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjWrapper_RegReg(insn) \ 136a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjWrapper_RegMem(insn) \ 137a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj \ 138a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjvoid do_##insn ( void ) \ 139a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj{ \ 140a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj Int i; \ 141a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj UChar* buf; \ 142a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj RRArgs rargs __attribute__((aligned(16))); \ 143a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj RMArgs margs __attribute__((aligned(16))); \ 144a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj for (i = 0; i < 5; i++) { \ 145a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj randRRArgs(&rargs); \ 146a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj r_r_##insn(&rargs); \ 1472de044165d2bff58aca58fec3c3c9e34d949730esewardj showRR(#insn, &rargs, res_mask); \ 148a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj } \ 149a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj for (i = 0; i < 5; i++) { \ 150a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj randRMArgs(&margs); \ 15183b62cbbab29bde83eba40231f307c2a311e73c8njn buf = memalign16(mem_size); \ 152a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj randomise(buf,mem_size); \ 153a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj r_m_##insn(&margs,buf); \ 1542de044165d2bff58aca58fec3c3c9e34d949730esewardj showRM(#insn, &margs, buf, mem_size, res_mask);\ 155a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj free(buf); \ 156a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj } \ 157a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj} 158a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 1592de044165d2bff58aca58fec3c3c9e34d949730esewardj/* Note: these are little endian. Hence first byte is the least 1602de044165d2bff58aca58fec3c3c9e34d949730esewardj significant byte of lane zero. */ 1612de044165d2bff58aca58fec3c3c9e34d949730esewardj 1622de044165d2bff58aca58fec3c3c9e34d949730esewardj/* Mask for insns where all result bits are non-approximated. */ 1632de044165d2bff58aca58fec3c3c9e34d949730esewardjstatic V128 AllMask = { 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 1642de044165d2bff58aca58fec3c3c9e34d949730esewardj 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF }; 1652de044165d2bff58aca58fec3c3c9e34d949730esewardj 1662de044165d2bff58aca58fec3c3c9e34d949730esewardj/* Mark for insns which produce approximated vector short results. */ 16749ceddc083470c6c8261d6029ebedcee228323c5sewardjstatic V128 ApproxPS = { 0x00,0x00,0x80,0xFF, 0x00,0x00,0x80,0xFF, 16849ceddc083470c6c8261d6029ebedcee228323c5sewardj 0x00,0x00,0x80,0xFF, 0x00,0x00,0x80,0xFF }; 1692de044165d2bff58aca58fec3c3c9e34d949730esewardj 1702de044165d2bff58aca58fec3c3c9e34d949730esewardj/* Mark for insns which produce approximated scalar short results. */ 17149ceddc083470c6c8261d6029ebedcee228323c5sewardjstatic V128 ApproxSS = { 0x00,0x00,0x80,0xFF, 0xFF,0xFF,0xFF,0xFF, 1722de044165d2bff58aca58fec3c3c9e34d949730esewardj 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF }; 1732de044165d2bff58aca58fec3c3c9e34d949730esewardj 174a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj#define PD 16 175a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj#define SD 8 176a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj#define PS 16 177a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj#define SS 4 178a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 179a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj/* ------------------------ SSE1 ------------------------ */ 1802de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,addps) 1812de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,addss) 1822de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,andnps) 1832de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,andps) 1842de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,cmpeqps) 1852de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,cmpeqss) 1862de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,cmpleps) 1872de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,cmpless) 1882de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,cmpltps) 1892de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,cmpltss) 1902de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,cmpneqps) 1912de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,cmpneqss) 1922de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,cmpnleps) 1932de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,cmpnless) 1942de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,cmpnltps) 1952de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,cmpnltss) 1962de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,cmpordps) 1972de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,cmpordss) 1982de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,cmpunordps) 1992de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,cmpunordss) 2002de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,comiss) 2012de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,cvtpi2ps) 2022de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,cvtps2pi) 2032de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,cvtsi2ss) 2042de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,cvtss2si) 2052de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,cvttps2pi) 2062de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,cvttss2si) 2072de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,divps) 2082de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,divss) 2092de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,maxps) 2102de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,maxss) 2112de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,minps) 2122de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,minss) 2132de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,movaps) 2142de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movhlps) 2152de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movhps) 2162de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movlhps) 2172de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movlps) 2182de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movmskps) 2192de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movntps) 2202de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movntq) 2212de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 4,movss) 2222de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,movups) 2232de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,mulps) 2242de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,mulss) 2252de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,orps) 2262de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,pavgb) -- dup with sse2? 2272de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,pavgw) -- dup with sse2? 2282de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,pextrw) 2292de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,pinsrw) 2302de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,pmaxsw) -- dup with sse2? 2312de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,pmaxub) -- dup with sse2? 2322de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,pminsw) -- dup with sse2? 2332de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,pminub) -- dup with sse2? 2342de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,pmovmskb) 2352de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,pmulhuw) -- dup with sse2? 2362de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psadbw) // -- XXXXXXXXXXXXXXXX sse2 (xmm variant) not implemented! 2372de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,pshufw) 2382de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN(&ApproxPS, PS,rcpps) 2392de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN(&ApproxSS, SS,rcpss) 2402de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN(&ApproxPS, PS,rsqrtps) 2412de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN(&ApproxSS, SS,rsqrtss) 2422de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, PS,shufps) 2432de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,sqrtps) 2442de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,sqrtss) 2452de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,subps) 2462de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,subss) 2472de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,ucomiss) 2482de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,unpckhps) 2492de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,unpcklps) 2502de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,xorps) 251a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 252a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 253a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj/* ------------------------ SSE2 ------------------------ */ 2542de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,addpd) 2552de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,addsd) 2562de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,andnpd) 2572de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,andpd) 2582de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,cmpeqpd) 2592de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,cmpeqsd) 2602de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,cmplepd) 2612de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,cmplesd) 2622de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,cmpltpd) 2632de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,cmpltsd) 2642de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,cmpneqpd) 2652de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,cmpneqsd) 2662de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,cmpnlepd) 2672de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,cmpnlesd) 2682de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,cmpnltpd) 2692de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,cmpnltsd) 2702de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,cmpordpd) 2712de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,cmpordsd) 2722de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,cmpunordpd) 2732de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,cmpunordsd) 2742de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,comisd) 2752de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 8,cvtdq2pd) 2762de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,cvtdq2ps) 2772de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,cvtpd2dq) 2782de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,cvtpd2pi) 2792de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,cvtpd2ps) /* reads 16 */ 2802de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,cvtpi2pd) 2812de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,cvtps2dq) /* reads 16 */ 2822de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 8,cvtps2pd) /* reads 8 */ 2832de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,cvtsd2si) 2842de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,cvtsd2ss) /* reads SD */ 2852de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,cvtsi2sd) 2862de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,cvtss2sd) /* reads SS */ 2872de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,cvttpd2dq) 2882de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,cvttpd2pi) 2892de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,cvttps2dq) 2902de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,cvttsd2si) 2912de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,divpd) 2922de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,divsd) 2932de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,maxpd) 2942de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,maxsd) 2952de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,minpd) 2962de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,minsd) 2972de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,movapd) 2982de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 8,movd) 2992de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movdq2q) 3002de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,movdqa) 3012de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,movdqu) 3022de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 16,movhpd) 3032de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 16,movlpd) 3042de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movmskpd) 3052de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movntdq) 3062de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movnti) 3072de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movntpd) 3082de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 8,movq) 3092de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movq2dq) 3102de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 8,movsd) 3112de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,movupd) 3122de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,mulpd) 3132de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,mulsd) 3142de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,orpd) 3152de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,packssdw) 3162de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,packsswb) 3172de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,packuswb) 3182de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,paddb) 3192de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,paddd) 3202de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,paddq) 3212de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,paddsb) 3222de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,paddsw) 3232de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,paddusb) 3242de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,paddusw) 3252de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,paddw) 3262de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pand) 3272de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pandn) 3282de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pavgb) 3292de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pavgw) 3302de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pcmpeqb) 3312de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pcmpeqd) 3322de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pcmpeqw) 3332de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pcmpgtb) 3342de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pcmpgtd) 3352de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pcmpgtw) 3362de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 16,pextrw) 3372de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 16,pinsrw) 3382de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pmaxsw) 3392de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pmaxub) 3402de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pminsw) 3412de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pminub) 3422de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,pmovmskb) 3432de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pmulhuw) 3442de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pmulhw) 3452de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pmullw) 3462de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pmuludq) 3472de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,por) 3482de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 16,pshufd) 3492de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 16,pshufhw) 3502de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 16,pshuflw) 3512de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pslld) 3522de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 16,pslldq) 3532de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psllq) 3542de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psllw) 3552de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psrad) 3562de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psraw) 3572de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psrld) 3582de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 16,psrldq) 3592de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psrlq) 3602de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psrlw) 3612de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psubb) 3622de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psubd) 3632de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psubq) 3642de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psubsb) 3652de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psubsw) 3662de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psubusb) 3672de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psubusw) 3682de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psubw) 3692de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,punpckhbw) 3702de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,punpckhdq) 3712de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,punpckhqdq) 3722de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,punpckhwd) 3732de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,punpcklbw) 3742de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,punpckldq) 3752de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,punpcklqdq) 3762de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,punpcklwd) 3772de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pxor) 3782de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, PD,shufpd) 3792de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,sqrtpd) 3802de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,sqrtsd) 3812de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,subpd) 3822de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,subsd) 3832de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,ucomisd) 3842de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,unpckhpd) 3852de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,unpcklpd) 3862de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,xorpd) 387a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 388a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 389a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjint main ( int argc, char** argv ) 390a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj{ 391a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj Int sse1 = 0, sse2 = 0; 392a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 393a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj if (argc == 2 && 0==strcmp(argv[1], "sse1")) { 394a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj sse1 = 1; 395a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj } 396a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj else 397a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj if (argc == 2 && 0==strcmp(argv[1], "sse2")) { 398a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj sse2 = 1; 399a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj } 400a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj else 401a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj if (argc == 2 && 0==strcmp(argv[1], "all")) { 402a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj sse1 = sse2 = 1; 403a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj } 404a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj else { 405a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj fprintf(stderr, "usage: sse_memory [sse1|sse2|all]\n"); 406a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj return 0; 407a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj } 408a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 409a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj /* ------------------------ SSE1 ------------------------ */ 410a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj if (sse1) { 411a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_addps(); 412a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_addss(); 413a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_andnps(); 414a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_andps(); 415a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpeqps(); 416a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpeqss(); 417a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpleps(); 418a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpless(); 419a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpltps(); 420a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpltss(); 421a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpneqps(); 422a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpneqss(); 423a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpnleps(); 424a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpnless(); 425a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpnltps(); 426a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpnltss(); 427a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpordps(); 428a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpordss(); 429a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpunordps(); 430a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpunordss(); 431a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_comiss(); 4322de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,cvtpi2ps) 4332de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,cvtps2pi) 4342de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,cvtsi2ss) 4352de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,cvtss2si) 4362de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,cvttps2pi) 4372de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,cvttss2si) 438a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_divps(); 439a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_divss(); 440a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_maxps(); 441a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_maxss(); 442a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_minps(); 443a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_minss(); 444a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_movaps(); 4452de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,movhlps) 4462de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,movhps) 4472de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,movlhps) 4482de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,movlps) 4492de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,movmskps) 4502de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,movntps) 4512de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,movntq) 452a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_movss(); 453a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_movups(); 454a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_mulps(); 455a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_mulss(); 456a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_orps(); 4572de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,pavgb) -- dup with sse2? 4582de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,pavgw) -- dup with sse2? 4592de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,pextrw) 4602de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,pinsrw) 4612de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,pmaxsw) -- dup with sse2? 4622de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,pmaxub) -- dup with sse2? 4632de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,pminsw) -- dup with sse2? 4642de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,pminub) -- dup with sse2? 4652de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,pmovmskb) 4662de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,pmulhuw) -- dup with sse2? 467a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj //do_psadbw(); -- XXXXXXXXXXXXXXXX sse2 (xmm variant) not implemented! 4682de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,pshufw) 469a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_rcpps(); 470a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_rcpss(); 471a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_rsqrtps(); 472a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_rsqrtss(); 4732de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, PS,shufps) 474a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_sqrtps(); 475a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_sqrtss(); 476a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_subps(); 477a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_subss(); 478a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_ucomiss(); 479a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_unpckhps(); 480a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_unpcklps(); 481a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_xorps(); 482a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj } 483a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 484a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj /* ------------------------ SSE2 ------------------------ */ 485a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj if (sse2) { 486a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_addpd(); 487a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_addsd(); 488a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_andnpd(); 489a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_andpd(); 490a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpeqpd(); 491a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpeqsd(); 492a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmplepd(); 493a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmplesd(); 494a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpltpd(); 495a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpltsd(); 496a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpneqpd(); 497a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpneqsd(); 498a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpnlepd(); 499a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpnlesd(); 500a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpnltpd(); 501a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpnltsd(); 502a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpordpd(); 503a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpordsd(); 504a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpunordpd(); 505a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cmpunordsd(); 506a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_comisd(); 507a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cvtdq2pd(); 508a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cvtdq2ps(); 509a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cvtpd2dq(); 5102de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,cvtpd2pi) 511a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cvtpd2ps(); 5122de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,cvtpi2pd) 513a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cvtps2dq(); 514a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cvtps2pd(); 5152de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,cvtsd2si) 516a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cvtsd2ss(); 5172de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,cvtsi2sd) 518a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cvtss2sd(); 519a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cvttpd2dq(); 5202de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,cvttpd2pi) 521a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_cvttps2dq(); 5222de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,cvttsd2si) 523a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_divpd(); 524a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_divsd(); 525a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_maxpd(); 526a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_maxsd(); 527a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_minpd(); 528a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_minsd(); 529a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_movapd(); 5302de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 8,movd) 5312de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,movdq2q) 532a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_movdqa(); 533a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_movdqu(); 5342de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 16,movhpd) 5352de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 16,movlpd) 5362de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,movmskpd) 5372de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,movntdq) 5382de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,movnti) 5392de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,movntpd) 540a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_movq(); 5412de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,movq2dq) 542a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_movsd(); 543a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_movupd(); 544a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_mulpd(); 545a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_mulsd(); 546a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_orpd(); 547a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_packssdw(); 548a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_packsswb(); 549a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_packuswb(); 550a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_paddb(); 551a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_paddd(); 552a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_paddq(); 553a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_paddsb(); 554a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_paddsw(); 555a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_paddusb(); 556a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_paddusw(); 557a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_paddw(); 558a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_pand(); 559a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_pandn(); 560a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_pavgb(); 561a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_pavgw(); 562a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_pcmpeqb(); 563a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_pcmpeqd(); 564a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_pcmpeqw(); 565a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_pcmpgtb(); 566a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_pcmpgtd(); 567a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_pcmpgtw(); 5682de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 16,pextrw) 5692de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 16,pinsrw) 570a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_pmaxsw(); 571a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_pmaxub(); 572a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_pminsw(); 573a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_pminub(); 5742de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 0,pmovmskb) 575a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_pmulhuw(); 576a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_pmulhw(); 577a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_pmullw(); 578a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_pmuludq(); 579a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_por(); 5802de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 16,pshufd) 5812de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 16,pshufhw) 5822de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 16,pshuflw) 583a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_pslld(); 5842de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 16,pslldq) 585a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_psllq(); 586a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_psllw(); 587a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_psrad(); 588a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_psraw(); 589a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_psrld(); 5902de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, 16,psrldq) 591a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_psrlq(); 592a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_psrlw(); 593a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_psubb(); 594a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_psubd(); 595a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_psubq(); 596a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_psubsb(); 597a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_psubsw(); 598a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_psubusb(); 599a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_psubusw(); 600a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_psubw(); 601a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_punpckhbw(); 602a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_punpckhdq(); 603a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_punpckhqdq(); 604a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_punpckhwd(); 605a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_punpcklbw(); 606a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_punpckldq(); 607a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_punpcklqdq(); 608a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_punpcklwd(); 609a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_pxor(); 6102de044165d2bff58aca58fec3c3c9e34d949730esewardj //TEST_INSN( &AllMask, PD,shufpd) 611a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_sqrtpd(); 612a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_sqrtsd(); 613a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_subpd(); 614a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_subsd(); 615a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_ucomisd(); 616a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_unpckhpd(); 617a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_unpcklpd(); 618a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj do_xorpd(); 619a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj } 620a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 621a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj return 0; 622a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj} 623a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj 624