Lines Matching full:ctrl
1781 static inline int pcmp_elen(int reg, uint32_t ctrl)
1786 if (ctrl >> 8)
1791 if (ctrl & 1) {
1801 static inline int pcmp_ilen(Reg *r, uint8_t ctrl)
1805 if (ctrl & 1) {
1815 static inline int pcmp_val(Reg *r, uint8_t ctrl, int i)
1817 switch ((ctrl >> 0) & 3) {
1831 int8_t ctrl, int valids, int validd)
1836 int upper = (ctrl & 1) ? 7 : 15;
1843 switch ((ctrl >> 2) & 3) {
1847 v = pcmp_val(s, ctrl, j);
1849 res |= (v == pcmp_val(d, ctrl, i));
1855 v = pcmp_val(s, ctrl, j);
1857 res |= (pcmp_val(d, ctrl, i - 0) <= v &&
1858 pcmp_val(d, ctrl, i - 1) >= v);
1866 v = pcmp_val(s, ctrl, i);
1867 res |= (v == pcmp_val(d, ctrl, i));
1875 res &= (pcmp_val(s, ctrl, i + j) == pcmp_val(d, ctrl, i));
1880 switch ((ctrl >> 4) & 3) {
1923 void glue(helper_pcmpestri, SUFFIX) (Reg *d, Reg *s, uint32_t ctrl)
1925 unsigned int res = pcmpxstrx(d, s, ctrl,
1926 pcmp_elen(R_EDX, ctrl),
1927 pcmp_elen(R_EAX, ctrl));
1930 env->regs[R_ECX] = ((ctrl & (1 << 6)) ? rffs1 : ffs1)(res) - 1;
1932 env->regs[R_ECX] = 16 >> (ctrl & (1 << 0));
1935 void glue(helper_pcmpestrm, SUFFIX) (Reg *d, Reg *s, uint32_t ctrl)
1938 unsigned int res = pcmpxstrx(d, s, ctrl,
1939 pcmp_elen(R_EDX, ctrl),
1940 pcmp_elen(R_EAX, ctrl));
1942 if ((ctrl >> 6) & 1) {
1943 if (ctrl & 1)
1955 void glue(helper_pcmpistri, SUFFIX) (Reg *d, Reg *s, uint32_t ctrl)
1957 unsigned int res = pcmpxstrx(d, s, ctrl,
1958 pcmp_ilen(s, ctrl),
1959 pcmp_ilen(d, ctrl));
1962 env->regs[R_ECX] = ((ctrl & (1 << 6)) ? rffs1 : ffs1)(res) - 1;
1964 env->regs[R_ECX] = 16 >> (ctrl & (1 << 0));
1967 void glue(helper_pcmpistrm, SUFFIX) (Reg *d, Reg *s, uint32_t ctrl)
1970 unsigned int res = pcmpxstrx(d, s, ctrl,
1971 pcmp_ilen(s, ctrl),
1972 pcmp_ilen(d, ctrl));
1974 if ((ctrl >> 6) & 1) {
1975 if (ctrl & 1)