17cf9345cSTaylor Simpson/* 27cf9345cSTaylor Simpson * Copyright(c) 2019-2021 Qualcomm Innovation Center, Inc. All Rights Reserved. 37cf9345cSTaylor Simpson * 47cf9345cSTaylor Simpson * This program is free software; you can redistribute it and/or modify 57cf9345cSTaylor Simpson * it under the terms of the GNU General Public License as published by 67cf9345cSTaylor Simpson * the Free Software Foundation; either version 2 of the License, or 77cf9345cSTaylor Simpson * (at your option) any later version. 87cf9345cSTaylor Simpson * 97cf9345cSTaylor Simpson * This program is distributed in the hope that it will be useful, 107cf9345cSTaylor Simpson * but WITHOUT ANY WARRANTY; without even the implied warranty of 117cf9345cSTaylor Simpson * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 127cf9345cSTaylor Simpson * GNU General Public License for more details. 137cf9345cSTaylor Simpson * 147cf9345cSTaylor Simpson * You should have received a copy of the GNU General Public License 157cf9345cSTaylor Simpson * along with this program; if not, see <http://www.gnu.org/licenses/>. 167cf9345cSTaylor Simpson */ 177cf9345cSTaylor Simpson 187cf9345cSTaylor Simpson/* 197cf9345cSTaylor Simpson * Compare Instructions 207cf9345cSTaylor Simpson */ 217cf9345cSTaylor Simpson 227cf9345cSTaylor Simpson 237cf9345cSTaylor Simpson 247cf9345cSTaylor Simpson/*********************************************/ 257cf9345cSTaylor Simpson/* Scalar compare instructions */ 267cf9345cSTaylor Simpson/*********************************************/ 277cf9345cSTaylor Simpson 287cf9345cSTaylor SimpsonQ6INSN(C2_cmpeq,"Pd4=cmp.eq(Rs32,Rt32)",ATTRIBS(), 297cf9345cSTaylor Simpson"Compare for Equal", 307cf9345cSTaylor Simpson{PdV=f8BITSOF(RsV==RtV);}) 317cf9345cSTaylor Simpson 327cf9345cSTaylor SimpsonQ6INSN(C2_cmpgt,"Pd4=cmp.gt(Rs32,Rt32)",ATTRIBS(), 337cf9345cSTaylor Simpson"Compare for signed Greater Than", 347cf9345cSTaylor Simpson{PdV=f8BITSOF(RsV>RtV);}) 357cf9345cSTaylor Simpson 367cf9345cSTaylor SimpsonQ6INSN(C2_cmpgtu,"Pd4=cmp.gtu(Rs32,Rt32)",ATTRIBS(), 377cf9345cSTaylor Simpson"Compare for Greater Than Unsigned", 387cf9345cSTaylor Simpson{PdV=f8BITSOF(fCAST4u(RsV)>fCAST4u(RtV));}) 397cf9345cSTaylor Simpson 407cf9345cSTaylor SimpsonQ6INSN(C2_cmpeqp,"Pd4=cmp.eq(Rss32,Rtt32)",ATTRIBS(), 417cf9345cSTaylor Simpson"Compare for Equal", 427cf9345cSTaylor Simpson{PdV=f8BITSOF(RssV==RttV);}) 437cf9345cSTaylor Simpson 447cf9345cSTaylor SimpsonQ6INSN(C2_cmpgtp,"Pd4=cmp.gt(Rss32,Rtt32)",ATTRIBS(), 457cf9345cSTaylor Simpson"Compare for signed Greater Than", 467cf9345cSTaylor Simpson{PdV=f8BITSOF(RssV>RttV);}) 477cf9345cSTaylor Simpson 487cf9345cSTaylor SimpsonQ6INSN(C2_cmpgtup,"Pd4=cmp.gtu(Rss32,Rtt32)",ATTRIBS(), 497cf9345cSTaylor Simpson"Compare for Greater Than Unsigned", 507cf9345cSTaylor Simpson{PdV=f8BITSOF(fCAST8u(RssV)>fCAST8u(RttV));}) 517cf9345cSTaylor Simpson 527cf9345cSTaylor Simpson 537cf9345cSTaylor Simpson 547cf9345cSTaylor Simpson 557cf9345cSTaylor Simpson/*********************************************/ 567cf9345cSTaylor Simpson/* Compare and put result in GPR */ 577cf9345cSTaylor Simpson/* typically for function I/O */ 587cf9345cSTaylor Simpson/*********************************************/ 597cf9345cSTaylor Simpson 607cf9345cSTaylor SimpsonQ6INSN(A4_rcmpeqi,"Rd32=cmp.eq(Rs32,#s8)",ATTRIBS(), 617cf9345cSTaylor Simpson"Compare for Equal", 627cf9345cSTaylor Simpson{fIMMEXT(siV); RdV=(RsV==siV); }) 637cf9345cSTaylor Simpson 647cf9345cSTaylor SimpsonQ6INSN(A4_rcmpneqi,"Rd32=!cmp.eq(Rs32,#s8)",ATTRIBS(), 657cf9345cSTaylor Simpson"Compare for Equal", 667cf9345cSTaylor Simpson{fIMMEXT(siV); RdV=(RsV!=siV); }) 677cf9345cSTaylor Simpson 687cf9345cSTaylor Simpson 697cf9345cSTaylor SimpsonQ6INSN(A4_rcmpeq,"Rd32=cmp.eq(Rs32,Rt32)",ATTRIBS(), 707cf9345cSTaylor Simpson"Compare for Equal", 717cf9345cSTaylor Simpson{RdV=(RsV==RtV); }) 727cf9345cSTaylor Simpson 737cf9345cSTaylor SimpsonQ6INSN(A4_rcmpneq,"Rd32=!cmp.eq(Rs32,Rt32)",ATTRIBS(), 747cf9345cSTaylor Simpson"Compare for Equal", 757cf9345cSTaylor Simpson{RdV=(RsV!=RtV); }) 767cf9345cSTaylor Simpson 777cf9345cSTaylor Simpson 787cf9345cSTaylor Simpson 797cf9345cSTaylor Simpson/*********************************************/ 807cf9345cSTaylor Simpson/* Scalar compare instructions */ 817cf9345cSTaylor Simpson/*********************************************/ 827cf9345cSTaylor Simpson 837cf9345cSTaylor Simpson 847cf9345cSTaylor SimpsonQ6INSN(C2_bitsset,"Pd4=bitsset(Rs32,Rt32)",ATTRIBS(A_ARCHV2), 857cf9345cSTaylor Simpson"Compare for selected bits set", 867cf9345cSTaylor Simpson{PdV=f8BITSOF((RsV&RtV)==RtV);}) 877cf9345cSTaylor Simpson 887cf9345cSTaylor SimpsonQ6INSN(C2_bitsclr,"Pd4=bitsclr(Rs32,Rt32)",ATTRIBS(A_ARCHV2), 897cf9345cSTaylor Simpson"Compare for selected bits clear", 907cf9345cSTaylor Simpson{PdV=f8BITSOF((RsV&RtV)==0);}) 917cf9345cSTaylor Simpson 927cf9345cSTaylor Simpson 937cf9345cSTaylor SimpsonQ6INSN(C4_nbitsset,"Pd4=!bitsset(Rs32,Rt32)",ATTRIBS(A_ARCHV2), 947cf9345cSTaylor Simpson"Compare for selected bits set", 957cf9345cSTaylor Simpson{PdV=f8BITSOF((RsV&RtV)!=RtV);}) 967cf9345cSTaylor Simpson 977cf9345cSTaylor SimpsonQ6INSN(C4_nbitsclr,"Pd4=!bitsclr(Rs32,Rt32)",ATTRIBS(A_ARCHV2), 987cf9345cSTaylor Simpson"Compare for selected bits clear", 997cf9345cSTaylor Simpson{PdV=f8BITSOF((RsV&RtV)!=0);}) 1007cf9345cSTaylor Simpson 1017cf9345cSTaylor Simpson 1027cf9345cSTaylor Simpson 1037cf9345cSTaylor Simpson/*********************************************/ 1047cf9345cSTaylor Simpson/* Scalar compare instructions W/ immediate */ 1057cf9345cSTaylor Simpson/*********************************************/ 1067cf9345cSTaylor Simpson 1077cf9345cSTaylor SimpsonQ6INSN(C2_cmpeqi,"Pd4=cmp.eq(Rs32,#s10)",ATTRIBS(), 1087cf9345cSTaylor Simpson"Compare for Equal", 1097cf9345cSTaylor Simpson{fIMMEXT(siV); PdV=f8BITSOF(RsV==siV);}) 1107cf9345cSTaylor Simpson 1117cf9345cSTaylor SimpsonQ6INSN(C2_cmpgti,"Pd4=cmp.gt(Rs32,#s10)",ATTRIBS(), 1127cf9345cSTaylor Simpson"Compare for signed Greater Than", 1137cf9345cSTaylor Simpson{fIMMEXT(siV); PdV=f8BITSOF(RsV>siV);}) 1147cf9345cSTaylor Simpson 1157cf9345cSTaylor SimpsonQ6INSN(C2_cmpgtui,"Pd4=cmp.gtu(Rs32,#u9)",ATTRIBS(), 1167cf9345cSTaylor Simpson"Compare for Greater Than Unsigned", 1177cf9345cSTaylor Simpson{fIMMEXT(uiV); PdV=f8BITSOF(fCAST4u(RsV)>fCAST4u(uiV));}) 1187cf9345cSTaylor Simpson 1197cf9345cSTaylor SimpsonQ6INSN(C2_bitsclri,"Pd4=bitsclr(Rs32,#u6)",ATTRIBS(A_ARCHV2), 1207cf9345cSTaylor Simpson"Compare for selected bits clear", 1217cf9345cSTaylor Simpson{PdV=f8BITSOF((RsV&uiV)==0);}) 1227cf9345cSTaylor Simpson 1237cf9345cSTaylor SimpsonQ6INSN(C4_nbitsclri,"Pd4=!bitsclr(Rs32,#u6)",ATTRIBS(A_ARCHV2), 1247cf9345cSTaylor Simpson"Compare for selected bits clear", 1257cf9345cSTaylor Simpson{PdV=f8BITSOF((RsV&uiV)!=0);}) 1267cf9345cSTaylor Simpson 1277cf9345cSTaylor Simpson 1287cf9345cSTaylor Simpson 1297cf9345cSTaylor Simpson 1307cf9345cSTaylor SimpsonQ6INSN(C4_cmpneqi,"Pd4=!cmp.eq(Rs32,#s10)",ATTRIBS(), "Compare for Not Equal", {fIMMEXT(siV); PdV=f8BITSOF(RsV!=siV);}) 1317cf9345cSTaylor SimpsonQ6INSN(C4_cmpltei,"Pd4=!cmp.gt(Rs32,#s10)",ATTRIBS(), "Compare for Less Than or Equal", {fIMMEXT(siV); PdV=f8BITSOF(RsV<=siV);}) 1327cf9345cSTaylor SimpsonQ6INSN(C4_cmplteui,"Pd4=!cmp.gtu(Rs32,#u9)",ATTRIBS(), "Compare for Less Than or Equal Unsigned", {fIMMEXT(uiV); PdV=f8BITSOF(fCAST4u(RsV)<=fCAST4u(uiV));}) 1337cf9345cSTaylor Simpson 1347cf9345cSTaylor SimpsonQ6INSN(C4_cmpneq,"Pd4=!cmp.eq(Rs32,Rt32)",ATTRIBS(), "And-Compare for Equal", {PdV=f8BITSOF(RsV!=RtV);}) 1357cf9345cSTaylor SimpsonQ6INSN(C4_cmplte,"Pd4=!cmp.gt(Rs32,Rt32)",ATTRIBS(), "And-Compare for signed Greater Than", {PdV=f8BITSOF(RsV<=RtV);}) 1367cf9345cSTaylor SimpsonQ6INSN(C4_cmplteu,"Pd4=!cmp.gtu(Rs32,Rt32)",ATTRIBS(), "And-Compare for Greater Than Unsigned", {PdV=f8BITSOF(fCAST4u(RsV)<=fCAST4u(RtV));}) 1377cf9345cSTaylor Simpson 1387cf9345cSTaylor Simpson 1397cf9345cSTaylor Simpson 1407cf9345cSTaylor Simpson 1417cf9345cSTaylor Simpson 1427cf9345cSTaylor Simpson/* Predicate Logical Operations */ 1437cf9345cSTaylor Simpson 1447cf9345cSTaylor SimpsonQ6INSN(C2_and,"Pd4=and(Pt4,Ps4)",ATTRIBS(A_CRSLOT23), 1457cf9345cSTaylor Simpson"Predicate AND", 1467cf9345cSTaylor Simpson{PdV=PsV & PtV;}) 1477cf9345cSTaylor Simpson 1487cf9345cSTaylor SimpsonQ6INSN(C2_or,"Pd4=or(Pt4,Ps4)",ATTRIBS(A_CRSLOT23), 1497cf9345cSTaylor Simpson"Predicate OR", 1507cf9345cSTaylor Simpson{PdV=PsV | PtV;}) 1517cf9345cSTaylor Simpson 1527cf9345cSTaylor SimpsonQ6INSN(C2_xor,"Pd4=xor(Ps4,Pt4)",ATTRIBS(A_CRSLOT23), 1537cf9345cSTaylor Simpson"Predicate XOR", 1547cf9345cSTaylor Simpson{PdV=PsV ^ PtV;}) 1557cf9345cSTaylor Simpson 1567cf9345cSTaylor SimpsonQ6INSN(C2_andn,"Pd4=and(Pt4,!Ps4)",ATTRIBS(A_CRSLOT23), 1577cf9345cSTaylor Simpson"Predicate AND NOT", 1587cf9345cSTaylor Simpson{PdV=PtV & (~PsV);}) 1597cf9345cSTaylor Simpson 1607cf9345cSTaylor SimpsonQ6INSN(C2_not,"Pd4=not(Ps4)",ATTRIBS(A_CRSLOT23), 1617cf9345cSTaylor Simpson"Logical NOT Predicate", 1627cf9345cSTaylor Simpson{PdV=~PsV;}) 1637cf9345cSTaylor Simpson 1647cf9345cSTaylor SimpsonQ6INSN(C2_orn,"Pd4=or(Pt4,!Ps4)",ATTRIBS(A_ARCHV2,A_CRSLOT23), 1657cf9345cSTaylor Simpson"Predicate OR NOT", 1667cf9345cSTaylor Simpson{PdV=PtV | (~PsV);}) 1677cf9345cSTaylor Simpson 1687cf9345cSTaylor Simpson 1697cf9345cSTaylor Simpson 1707cf9345cSTaylor Simpson 1717cf9345cSTaylor Simpson 1727cf9345cSTaylor SimpsonQ6INSN(C4_and_and,"Pd4=and(Ps4,and(Pt4,Pu4))",ATTRIBS(A_CRSLOT23), 1737cf9345cSTaylor Simpson"Compound And-And", { PdV = PsV & PtV & PuV; }) 1747cf9345cSTaylor Simpson 1757cf9345cSTaylor SimpsonQ6INSN(C4_and_or,"Pd4=and(Ps4,or(Pt4,Pu4))",ATTRIBS(A_CRSLOT23), 1767cf9345cSTaylor Simpson"Compound And-Or", { PdV = PsV & (PtV | PuV); }) 1777cf9345cSTaylor Simpson 1787cf9345cSTaylor SimpsonQ6INSN(C4_or_and,"Pd4=or(Ps4,and(Pt4,Pu4))",ATTRIBS(A_CRSLOT23), 1797cf9345cSTaylor Simpson"Compound Or-And", { PdV = PsV | (PtV & PuV); }) 1807cf9345cSTaylor Simpson 1817cf9345cSTaylor SimpsonQ6INSN(C4_or_or,"Pd4=or(Ps4,or(Pt4,Pu4))",ATTRIBS(A_CRSLOT23), 1827cf9345cSTaylor Simpson"Compound Or-Or", { PdV = PsV | PtV | PuV; }) 1837cf9345cSTaylor Simpson 1847cf9345cSTaylor Simpson 1857cf9345cSTaylor Simpson 1867cf9345cSTaylor SimpsonQ6INSN(C4_and_andn,"Pd4=and(Ps4,and(Pt4,!Pu4))",ATTRIBS(A_CRSLOT23), 1877cf9345cSTaylor Simpson"Compound And-And", { PdV = PsV & PtV & (~PuV); }) 1887cf9345cSTaylor Simpson 1897cf9345cSTaylor SimpsonQ6INSN(C4_and_orn,"Pd4=and(Ps4,or(Pt4,!Pu4))",ATTRIBS(A_CRSLOT23), 1907cf9345cSTaylor Simpson"Compound And-Or", { PdV = PsV & (PtV | (~PuV)); }) 1917cf9345cSTaylor Simpson 1927cf9345cSTaylor SimpsonQ6INSN(C4_or_andn,"Pd4=or(Ps4,and(Pt4,!Pu4))",ATTRIBS(A_CRSLOT23), 1937cf9345cSTaylor Simpson"Compound Or-And", { PdV = PsV | (PtV & (~PuV)); }) 1947cf9345cSTaylor Simpson 1957cf9345cSTaylor SimpsonQ6INSN(C4_or_orn,"Pd4=or(Ps4,or(Pt4,!Pu4))",ATTRIBS(A_CRSLOT23), 1967cf9345cSTaylor Simpson"Compound Or-Or", { PdV = PsV | PtV | (~PuV); }) 1977cf9345cSTaylor Simpson 1987cf9345cSTaylor Simpson 1997cf9345cSTaylor SimpsonQ6INSN(C2_any8,"Pd4=any8(Ps4)",ATTRIBS(A_CRSLOT23), 2007cf9345cSTaylor Simpson"Logical ANY of low 8 predicate bits", 201*9fe33c0eSTaylor Simpson{ PdV = (PsV ? 0xff : 0x00); }) 2027cf9345cSTaylor Simpson 2037cf9345cSTaylor SimpsonQ6INSN(C2_all8,"Pd4=all8(Ps4)",ATTRIBS(A_CRSLOT23), 2047cf9345cSTaylor Simpson"Logical ALL of low 8 predicate bits", 205*9fe33c0eSTaylor Simpson{ PdV = (PsV == 0xff ? 0xff : 0x00); }) 2067cf9345cSTaylor Simpson 2077cf9345cSTaylor SimpsonQ6INSN(C2_vitpack,"Rd32=vitpack(Ps4,Pt4)",ATTRIBS(), 2087cf9345cSTaylor Simpson"Pack the odd and even bits of two predicate registers", 2097cf9345cSTaylor Simpson{ RdV = (PsV&0x55) | (PtV&0xAA); }) 2107cf9345cSTaylor Simpson 2117cf9345cSTaylor Simpson/* Mux instructions */ 2127cf9345cSTaylor Simpson 2137cf9345cSTaylor SimpsonQ6INSN(C2_mux,"Rd32=mux(Pu4,Rs32,Rt32)",ATTRIBS(), 2147cf9345cSTaylor Simpson"Scalar MUX", 215*9fe33c0eSTaylor Simpson{ RdV = (fLSBOLD(PuV) ? RsV : RtV); }) 2167cf9345cSTaylor Simpson 2177cf9345cSTaylor Simpson 2187cf9345cSTaylor SimpsonQ6INSN(C2_cmovenewit,"if (Pu4.new) Rd32=#s12",ATTRIBS(A_ARCHV2), 2197cf9345cSTaylor Simpson"Scalar conditional move", 2207cf9345cSTaylor Simpson{ fIMMEXT(siV); if (fLSBNEW(PuN)) RdV=siV; else CANCEL;}) 2217cf9345cSTaylor Simpson 2227cf9345cSTaylor SimpsonQ6INSN(C2_cmovenewif,"if (!Pu4.new) Rd32=#s12",ATTRIBS(A_ARCHV2), 2237cf9345cSTaylor Simpson"Scalar conditional move", 2247cf9345cSTaylor Simpson{ fIMMEXT(siV); if (fLSBNEWNOT(PuN)) RdV=siV; else CANCEL;}) 2257cf9345cSTaylor Simpson 2267cf9345cSTaylor SimpsonQ6INSN(C2_cmoveit,"if (Pu4) Rd32=#s12",ATTRIBS(A_ARCHV2), 2277cf9345cSTaylor Simpson"Scalar conditional move", 2287cf9345cSTaylor Simpson{ fIMMEXT(siV); if (fLSBOLD(PuV)) RdV=siV; else CANCEL;}) 2297cf9345cSTaylor Simpson 2307cf9345cSTaylor SimpsonQ6INSN(C2_cmoveif,"if (!Pu4) Rd32=#s12",ATTRIBS(A_ARCHV2), 2317cf9345cSTaylor Simpson"Scalar conditional move", 2327cf9345cSTaylor Simpson{ fIMMEXT(siV); if (fLSBOLDNOT(PuV)) RdV=siV; else CANCEL;}) 2337cf9345cSTaylor Simpson 2347cf9345cSTaylor Simpson 2357cf9345cSTaylor Simpson 2367cf9345cSTaylor SimpsonQ6INSN(C2_ccombinewnewt,"if (Pu4.new) Rdd32=combine(Rs32,Rt32)",ATTRIBS(A_ARCHV2), 2377cf9345cSTaylor Simpson"Conditionally combine two words into a register pair", 2387cf9345cSTaylor Simpson{ if (fLSBNEW(PuN)) { 2397cf9345cSTaylor Simpson fSETWORD(0,RddV,RtV); 2407cf9345cSTaylor Simpson fSETWORD(1,RddV,RsV); 2417cf9345cSTaylor Simpson } else {CANCEL;} 2427cf9345cSTaylor Simpson}) 2437cf9345cSTaylor Simpson 2447cf9345cSTaylor SimpsonQ6INSN(C2_ccombinewnewf,"if (!Pu4.new) Rdd32=combine(Rs32,Rt32)",ATTRIBS(A_ARCHV2), 2457cf9345cSTaylor Simpson"Conditionally combine two words into a register pair", 2467cf9345cSTaylor Simpson{ if (fLSBNEWNOT(PuN)) { 2477cf9345cSTaylor Simpson fSETWORD(0,RddV,RtV); 2487cf9345cSTaylor Simpson fSETWORD(1,RddV,RsV); 2497cf9345cSTaylor Simpson } else {CANCEL;} 2507cf9345cSTaylor Simpson}) 2517cf9345cSTaylor Simpson 2527cf9345cSTaylor SimpsonQ6INSN(C2_ccombinewt,"if (Pu4) Rdd32=combine(Rs32,Rt32)",ATTRIBS(A_ARCHV2), 2537cf9345cSTaylor Simpson"Conditionally combine two words into a register pair", 2547cf9345cSTaylor Simpson{ if (fLSBOLD(PuV)) { 2557cf9345cSTaylor Simpson fSETWORD(0,RddV,RtV); 2567cf9345cSTaylor Simpson fSETWORD(1,RddV,RsV); 2577cf9345cSTaylor Simpson } else {CANCEL;} 2587cf9345cSTaylor Simpson}) 2597cf9345cSTaylor Simpson 2607cf9345cSTaylor SimpsonQ6INSN(C2_ccombinewf,"if (!Pu4) Rdd32=combine(Rs32,Rt32)",ATTRIBS(A_ARCHV2), 2617cf9345cSTaylor Simpson"Conditionally combine two words into a register pair", 2627cf9345cSTaylor Simpson{ if (fLSBOLDNOT(PuV)) { 2637cf9345cSTaylor Simpson fSETWORD(0,RddV,RtV); 2647cf9345cSTaylor Simpson fSETWORD(1,RddV,RsV); 2657cf9345cSTaylor Simpson } else {CANCEL;} 2667cf9345cSTaylor Simpson}) 2677cf9345cSTaylor Simpson 2687cf9345cSTaylor Simpson 2697cf9345cSTaylor Simpson 2707cf9345cSTaylor SimpsonQ6INSN(C2_muxii,"Rd32=mux(Pu4,#s8,#S8)",ATTRIBS(A_ARCHV2), 2717cf9345cSTaylor Simpson"Scalar MUX immediates", 272*9fe33c0eSTaylor Simpson{ fIMMEXT(siV); RdV = (fLSBOLD(PuV) ? siV : SiV); }) 2737cf9345cSTaylor Simpson 2747cf9345cSTaylor Simpson 2757cf9345cSTaylor Simpson 2767cf9345cSTaylor SimpsonQ6INSN(C2_muxir,"Rd32=mux(Pu4,Rs32,#s8)",ATTRIBS(A_ARCHV2), 2777cf9345cSTaylor Simpson"Scalar MUX register immediate", 278*9fe33c0eSTaylor Simpson{ fIMMEXT(siV); RdV = (fLSBOLD(PuV) ? RsV : siV); }) 2797cf9345cSTaylor Simpson 2807cf9345cSTaylor Simpson 2817cf9345cSTaylor SimpsonQ6INSN(C2_muxri,"Rd32=mux(Pu4,#s8,Rs32)",ATTRIBS(A_ARCHV2), 2827cf9345cSTaylor Simpson"Scalar MUX register immediate", 283*9fe33c0eSTaylor Simpson{ fIMMEXT(siV); RdV = (fLSBOLD(PuV) ? siV : RsV); }) 2847cf9345cSTaylor Simpson 2857cf9345cSTaylor Simpson 2867cf9345cSTaylor Simpson 2877cf9345cSTaylor SimpsonQ6INSN(C2_vmux,"Rdd32=vmux(Pu4,Rss32,Rtt32)",ATTRIBS(), 2887cf9345cSTaylor Simpson"Vector MUX", 2897cf9345cSTaylor Simpson{ 2907cf9345cSTaylor Simpson fHIDE(int i;) 2917cf9345cSTaylor Simpson for (i = 0; i < 8; i++) { 2927cf9345cSTaylor Simpson fSETBYTE(i,RddV,(fGETBIT(i,PuV)?(fGETBYTE(i,RssV)):(fGETBYTE(i,RttV)))); 2937cf9345cSTaylor Simpson } 2947cf9345cSTaylor Simpson}) 2957cf9345cSTaylor Simpson 2967cf9345cSTaylor SimpsonQ6INSN(C2_mask,"Rdd32=mask(Pt4)",ATTRIBS(), 2977cf9345cSTaylor Simpson"Vector Mask Generation", 2987cf9345cSTaylor Simpson{ 2997cf9345cSTaylor Simpson fHIDE(int i;) 3007cf9345cSTaylor Simpson for (i = 0; i < 8; i++) { 3017cf9345cSTaylor Simpson fSETBYTE(i,RddV,(fGETBIT(i,PtV)?(0xff):(0x00))); 3027cf9345cSTaylor Simpson } 3037cf9345cSTaylor Simpson}) 3047cf9345cSTaylor Simpson 3057cf9345cSTaylor Simpson/* VCMP */ 3067cf9345cSTaylor Simpson 3077cf9345cSTaylor SimpsonQ6INSN(A2_vcmpbeq,"Pd4=vcmpb.eq(Rss32,Rtt32)",ATTRIBS(), 3087cf9345cSTaylor Simpson"Compare elements of two vectors ", 3097cf9345cSTaylor Simpson{ 3107cf9345cSTaylor Simpson fHIDE(int i;) 3117cf9345cSTaylor Simpson for (i = 0; i < 8; i++) { 3127cf9345cSTaylor Simpson fSETBIT(i,PdV,(fGETBYTE(i,RssV) == fGETBYTE(i,RttV))); 3137cf9345cSTaylor Simpson } 3147cf9345cSTaylor Simpson}) 3157cf9345cSTaylor Simpson 3167cf9345cSTaylor SimpsonQ6INSN(A4_vcmpbeqi,"Pd4=vcmpb.eq(Rss32,#u8)",ATTRIBS(), 3177cf9345cSTaylor Simpson"Compare elements of two vectors ", 3187cf9345cSTaylor Simpson{ 3197cf9345cSTaylor Simpson fHIDE(int i;) 3207cf9345cSTaylor Simpson for (i = 0; i < 8; i++) { 3217cf9345cSTaylor Simpson fSETBIT(i,PdV,(fGETUBYTE(i,RssV) == uiV)); 3227cf9345cSTaylor Simpson } 3237cf9345cSTaylor Simpson}) 3247cf9345cSTaylor Simpson 3257cf9345cSTaylor SimpsonQ6INSN(A4_vcmpbeq_any,"Pd4=any8(vcmpb.eq(Rss32,Rtt32))",ATTRIBS(), 3267cf9345cSTaylor Simpson"Compare elements of two vectors ", 3277cf9345cSTaylor Simpson{ 3287cf9345cSTaylor Simpson fHIDE(int i;) 3297cf9345cSTaylor Simpson PdV = 0; 3307cf9345cSTaylor Simpson for (i = 0; i < 8; i++) { 3317cf9345cSTaylor Simpson if (fGETBYTE(i,RssV) == fGETBYTE(i,RttV)) PdV = 0xff; 3327cf9345cSTaylor Simpson } 3337cf9345cSTaylor Simpson}) 3347cf9345cSTaylor Simpson 3357cf9345cSTaylor SimpsonQ6INSN(A6_vcmpbeq_notany,"Pd4=!any8(vcmpb.eq(Rss32,Rtt32))",ATTRIBS(), 3367cf9345cSTaylor Simpson"Compare elements of two vectors ", 3377cf9345cSTaylor Simpson{ 3387cf9345cSTaylor Simpson fHIDE(int i;) 3397cf9345cSTaylor Simpson PdV = 0; 3407cf9345cSTaylor Simpson for (i = 0; i < 8; i++) { 3417cf9345cSTaylor Simpson if (fGETBYTE(i,RssV) == fGETBYTE(i,RttV)) PdV = 0xff; 3427cf9345cSTaylor Simpson } 3437cf9345cSTaylor Simpson PdV = ~PdV; 3447cf9345cSTaylor Simpson}) 3457cf9345cSTaylor Simpson 3467cf9345cSTaylor SimpsonQ6INSN(A2_vcmpbgtu,"Pd4=vcmpb.gtu(Rss32,Rtt32)",ATTRIBS(), 3477cf9345cSTaylor Simpson"Compare elements of two vectors ", 3487cf9345cSTaylor Simpson{ 3497cf9345cSTaylor Simpson fHIDE(int i;) 3507cf9345cSTaylor Simpson for (i = 0; i < 8; i++) { 3517cf9345cSTaylor Simpson fSETBIT(i,PdV,(fGETUBYTE(i,RssV) > fGETUBYTE(i,RttV))); 3527cf9345cSTaylor Simpson } 3537cf9345cSTaylor Simpson}) 3547cf9345cSTaylor Simpson 3557cf9345cSTaylor SimpsonQ6INSN(A4_vcmpbgtui,"Pd4=vcmpb.gtu(Rss32,#u7)",ATTRIBS(), 3567cf9345cSTaylor Simpson"Compare elements of two vectors ", 3577cf9345cSTaylor Simpson{ 3587cf9345cSTaylor Simpson fHIDE(int i;) 3597cf9345cSTaylor Simpson for (i = 0; i < 8; i++) { 3607cf9345cSTaylor Simpson fSETBIT(i,PdV,(fGETUBYTE(i,RssV) > uiV)); 3617cf9345cSTaylor Simpson } 3627cf9345cSTaylor Simpson}) 3637cf9345cSTaylor Simpson 3647cf9345cSTaylor SimpsonQ6INSN(A4_vcmpbgt,"Pd4=vcmpb.gt(Rss32,Rtt32)",ATTRIBS(), 3657cf9345cSTaylor Simpson"Compare elements of two vectors ", 3667cf9345cSTaylor Simpson{ 3677cf9345cSTaylor Simpson fHIDE(int i;) 3687cf9345cSTaylor Simpson for (i = 0; i < 8; i++) { 3697cf9345cSTaylor Simpson fSETBIT(i,PdV,(fGETBYTE(i,RssV) > fGETBYTE(i,RttV))); 3707cf9345cSTaylor Simpson } 3717cf9345cSTaylor Simpson}) 3727cf9345cSTaylor Simpson 3737cf9345cSTaylor SimpsonQ6INSN(A4_vcmpbgti,"Pd4=vcmpb.gt(Rss32,#s8)",ATTRIBS(), 3747cf9345cSTaylor Simpson"Compare elements of two vectors ", 3757cf9345cSTaylor Simpson{ 3767cf9345cSTaylor Simpson fHIDE(int i;) 3777cf9345cSTaylor Simpson for (i = 0; i < 8; i++) { 3787cf9345cSTaylor Simpson fSETBIT(i,PdV,(fGETBYTE(i,RssV) > siV)); 3797cf9345cSTaylor Simpson } 3807cf9345cSTaylor Simpson}) 3817cf9345cSTaylor Simpson 3827cf9345cSTaylor Simpson 3837cf9345cSTaylor Simpson 3847cf9345cSTaylor SimpsonQ6INSN(A4_cmpbeq,"Pd4=cmpb.eq(Rs32,Rt32)",ATTRIBS(), 3857cf9345cSTaylor Simpson"Compare bytes ", 3867cf9345cSTaylor Simpson{ 3877cf9345cSTaylor Simpson PdV=f8BITSOF(fGETBYTE(0,RsV) == fGETBYTE(0,RtV)); 3887cf9345cSTaylor Simpson}) 3897cf9345cSTaylor Simpson 3907cf9345cSTaylor SimpsonQ6INSN(A4_cmpbeqi,"Pd4=cmpb.eq(Rs32,#u8)",ATTRIBS(), 3917cf9345cSTaylor Simpson"Compare bytes ", 3927cf9345cSTaylor Simpson{ 3937cf9345cSTaylor Simpson PdV=f8BITSOF(fGETUBYTE(0,RsV) == uiV); 3947cf9345cSTaylor Simpson}) 3957cf9345cSTaylor Simpson 3967cf9345cSTaylor SimpsonQ6INSN(A4_cmpbgtu,"Pd4=cmpb.gtu(Rs32,Rt32)",ATTRIBS(), 3977cf9345cSTaylor Simpson"Compare bytes ", 3987cf9345cSTaylor Simpson{ 3997cf9345cSTaylor Simpson PdV=f8BITSOF(fGETUBYTE(0,RsV) > fGETUBYTE(0,RtV)); 4007cf9345cSTaylor Simpson}) 4017cf9345cSTaylor Simpson 4027cf9345cSTaylor SimpsonQ6INSN(A4_cmpbgtui,"Pd4=cmpb.gtu(Rs32,#u7)",ATTRIBS(), 4037cf9345cSTaylor Simpson"Compare bytes ", 4047cf9345cSTaylor Simpson{ 4057cf9345cSTaylor Simpson fIMMEXT(uiV); 4067cf9345cSTaylor Simpson PdV=f8BITSOF(fGETUBYTE(0,RsV) > fCAST4u(uiV)); 4077cf9345cSTaylor Simpson}) 4087cf9345cSTaylor Simpson 4097cf9345cSTaylor SimpsonQ6INSN(A4_cmpbgt,"Pd4=cmpb.gt(Rs32,Rt32)",ATTRIBS(), 4107cf9345cSTaylor Simpson"Compare bytes ", 4117cf9345cSTaylor Simpson{ 4127cf9345cSTaylor Simpson PdV=f8BITSOF(fGETBYTE(0,RsV) > fGETBYTE(0,RtV)); 4137cf9345cSTaylor Simpson}) 4147cf9345cSTaylor Simpson 4157cf9345cSTaylor SimpsonQ6INSN(A4_cmpbgti,"Pd4=cmpb.gt(Rs32,#s8)",ATTRIBS(), 4167cf9345cSTaylor Simpson"Compare bytes ", 4177cf9345cSTaylor Simpson{ 4187cf9345cSTaylor Simpson PdV=f8BITSOF(fGETBYTE(0,RsV) > siV); 4197cf9345cSTaylor Simpson}) 4207cf9345cSTaylor Simpson 4217cf9345cSTaylor SimpsonQ6INSN(A2_vcmpheq,"Pd4=vcmph.eq(Rss32,Rtt32)",ATTRIBS(), 4227cf9345cSTaylor Simpson"Compare elements of two vectors ", 4237cf9345cSTaylor Simpson{ 4247cf9345cSTaylor Simpson fHIDE(int i;) 4257cf9345cSTaylor Simpson for (i = 0; i < 4; i++) { 4267cf9345cSTaylor Simpson fSETBIT(i*2,PdV, (fGETHALF(i,RssV) == fGETHALF(i,RttV))); 4277cf9345cSTaylor Simpson fSETBIT(i*2+1,PdV,(fGETHALF(i,RssV) == fGETHALF(i,RttV))); 4287cf9345cSTaylor Simpson } 4297cf9345cSTaylor Simpson}) 4307cf9345cSTaylor Simpson 4317cf9345cSTaylor SimpsonQ6INSN(A2_vcmphgt,"Pd4=vcmph.gt(Rss32,Rtt32)",ATTRIBS(), 4327cf9345cSTaylor Simpson"Compare elements of two vectors ", 4337cf9345cSTaylor Simpson{ 4347cf9345cSTaylor Simpson fHIDE(int i;) 4357cf9345cSTaylor Simpson for (i = 0; i < 4; i++) { 4367cf9345cSTaylor Simpson fSETBIT(i*2, PdV, (fGETHALF(i,RssV) > fGETHALF(i,RttV))); 4377cf9345cSTaylor Simpson fSETBIT(i*2+1,PdV, (fGETHALF(i,RssV) > fGETHALF(i,RttV))); 4387cf9345cSTaylor Simpson } 4397cf9345cSTaylor Simpson}) 4407cf9345cSTaylor Simpson 4417cf9345cSTaylor SimpsonQ6INSN(A2_vcmphgtu,"Pd4=vcmph.gtu(Rss32,Rtt32)",ATTRIBS(), 4427cf9345cSTaylor Simpson"Compare elements of two vectors ", 4437cf9345cSTaylor Simpson{ 4447cf9345cSTaylor Simpson fHIDE(int i;) 4457cf9345cSTaylor Simpson for (i = 0; i < 4; i++) { 4467cf9345cSTaylor Simpson fSETBIT(i*2, PdV, (fGETUHALF(i,RssV) > fGETUHALF(i,RttV))); 4477cf9345cSTaylor Simpson fSETBIT(i*2+1,PdV, (fGETUHALF(i,RssV) > fGETUHALF(i,RttV))); 4487cf9345cSTaylor Simpson } 4497cf9345cSTaylor Simpson}) 4507cf9345cSTaylor Simpson 4517cf9345cSTaylor SimpsonQ6INSN(A4_vcmpheqi,"Pd4=vcmph.eq(Rss32,#s8)",ATTRIBS(), 4527cf9345cSTaylor Simpson"Compare elements of two vectors ", 4537cf9345cSTaylor Simpson{ 4547cf9345cSTaylor Simpson fHIDE(int i;) 4557cf9345cSTaylor Simpson for (i = 0; i < 4; i++) { 4567cf9345cSTaylor Simpson fSETBIT(i*2,PdV, (fGETHALF(i,RssV) == siV)); 4577cf9345cSTaylor Simpson fSETBIT(i*2+1,PdV,(fGETHALF(i,RssV) == siV)); 4587cf9345cSTaylor Simpson } 4597cf9345cSTaylor Simpson}) 4607cf9345cSTaylor Simpson 4617cf9345cSTaylor SimpsonQ6INSN(A4_vcmphgti,"Pd4=vcmph.gt(Rss32,#s8)",ATTRIBS(), 4627cf9345cSTaylor Simpson"Compare elements of two vectors ", 4637cf9345cSTaylor Simpson{ 4647cf9345cSTaylor Simpson fHIDE(int i;) 4657cf9345cSTaylor Simpson for (i = 0; i < 4; i++) { 4667cf9345cSTaylor Simpson fSETBIT(i*2, PdV, (fGETHALF(i,RssV) > siV)); 4677cf9345cSTaylor Simpson fSETBIT(i*2+1,PdV, (fGETHALF(i,RssV) > siV)); 4687cf9345cSTaylor Simpson } 4697cf9345cSTaylor Simpson}) 4707cf9345cSTaylor Simpson 4717cf9345cSTaylor Simpson 4727cf9345cSTaylor SimpsonQ6INSN(A4_vcmphgtui,"Pd4=vcmph.gtu(Rss32,#u7)",ATTRIBS(), 4737cf9345cSTaylor Simpson"Compare elements of two vectors ", 4747cf9345cSTaylor Simpson{ 4757cf9345cSTaylor Simpson fHIDE(int i;) 4767cf9345cSTaylor Simpson for (i = 0; i < 4; i++) { 4777cf9345cSTaylor Simpson fSETBIT(i*2, PdV, (fGETUHALF(i,RssV) > uiV)); 4787cf9345cSTaylor Simpson fSETBIT(i*2+1,PdV, (fGETUHALF(i,RssV) > uiV)); 4797cf9345cSTaylor Simpson } 4807cf9345cSTaylor Simpson}) 4817cf9345cSTaylor Simpson 4827cf9345cSTaylor SimpsonQ6INSN(A4_cmpheq,"Pd4=cmph.eq(Rs32,Rt32)",ATTRIBS(), 4837cf9345cSTaylor Simpson"Compare halfwords ", 4847cf9345cSTaylor Simpson{ 4857cf9345cSTaylor Simpson PdV=f8BITSOF(fGETHALF(0,RsV) == fGETHALF(0,RtV)); 4867cf9345cSTaylor Simpson}) 4877cf9345cSTaylor Simpson 4887cf9345cSTaylor SimpsonQ6INSN(A4_cmphgt,"Pd4=cmph.gt(Rs32,Rt32)",ATTRIBS(), 4897cf9345cSTaylor Simpson"Compare halfwords ", 4907cf9345cSTaylor Simpson{ 4917cf9345cSTaylor Simpson PdV=f8BITSOF(fGETHALF(0,RsV) > fGETHALF(0,RtV)); 4927cf9345cSTaylor Simpson}) 4937cf9345cSTaylor Simpson 4947cf9345cSTaylor SimpsonQ6INSN(A4_cmphgtu,"Pd4=cmph.gtu(Rs32,Rt32)",ATTRIBS(), 4957cf9345cSTaylor Simpson"Compare halfwords ", 4967cf9345cSTaylor Simpson{ 4977cf9345cSTaylor Simpson PdV=f8BITSOF(fGETUHALF(0,RsV) > fGETUHALF(0,RtV)); 4987cf9345cSTaylor Simpson}) 4997cf9345cSTaylor Simpson 5007cf9345cSTaylor SimpsonQ6INSN(A4_cmpheqi,"Pd4=cmph.eq(Rs32,#s8)",ATTRIBS(), 5017cf9345cSTaylor Simpson"Compare halfwords ", 5027cf9345cSTaylor Simpson{ 5037cf9345cSTaylor Simpson fIMMEXT(siV); 5047cf9345cSTaylor Simpson PdV=f8BITSOF(fGETHALF(0,RsV) == siV); 5057cf9345cSTaylor Simpson}) 5067cf9345cSTaylor Simpson 5077cf9345cSTaylor SimpsonQ6INSN(A4_cmphgti,"Pd4=cmph.gt(Rs32,#s8)",ATTRIBS(), 5087cf9345cSTaylor Simpson"Compare halfwords ", 5097cf9345cSTaylor Simpson{ 5107cf9345cSTaylor Simpson fIMMEXT(siV); 5117cf9345cSTaylor Simpson PdV=f8BITSOF(fGETHALF(0,RsV) > siV); 5127cf9345cSTaylor Simpson}) 5137cf9345cSTaylor Simpson 5147cf9345cSTaylor SimpsonQ6INSN(A4_cmphgtui,"Pd4=cmph.gtu(Rs32,#u7)",ATTRIBS(), 5157cf9345cSTaylor Simpson"Compare halfwords ", 5167cf9345cSTaylor Simpson{ 5177cf9345cSTaylor Simpson fIMMEXT(uiV); 5187cf9345cSTaylor Simpson PdV=f8BITSOF(fGETUHALF(0,RsV) > fCAST4u(uiV)); 5197cf9345cSTaylor Simpson}) 5207cf9345cSTaylor Simpson 5217cf9345cSTaylor SimpsonQ6INSN(A2_vcmpweq,"Pd4=vcmpw.eq(Rss32,Rtt32)",ATTRIBS(), 5227cf9345cSTaylor Simpson"Compare elements of two vectors ", 5237cf9345cSTaylor Simpson{ 5247cf9345cSTaylor Simpson fSETBITS(3,0,PdV,(fGETWORD(0,RssV)==fGETWORD(0,RttV))); 5257cf9345cSTaylor Simpson fSETBITS(7,4,PdV,(fGETWORD(1,RssV)==fGETWORD(1,RttV))); 5267cf9345cSTaylor Simpson}) 5277cf9345cSTaylor Simpson 5287cf9345cSTaylor SimpsonQ6INSN(A2_vcmpwgt,"Pd4=vcmpw.gt(Rss32,Rtt32)",ATTRIBS(), 5297cf9345cSTaylor Simpson"Compare elements of two vectors ", 5307cf9345cSTaylor Simpson{ 5317cf9345cSTaylor Simpson fSETBITS(3,0,PdV,(fGETWORD(0,RssV)>fGETWORD(0,RttV))); 5327cf9345cSTaylor Simpson fSETBITS(7,4,PdV,(fGETWORD(1,RssV)>fGETWORD(1,RttV))); 5337cf9345cSTaylor Simpson}) 5347cf9345cSTaylor Simpson 5357cf9345cSTaylor SimpsonQ6INSN(A2_vcmpwgtu,"Pd4=vcmpw.gtu(Rss32,Rtt32)",ATTRIBS(), 5367cf9345cSTaylor Simpson"Compare elements of two vectors ", 5377cf9345cSTaylor Simpson{ 5387cf9345cSTaylor Simpson fSETBITS(3,0,PdV,(fGETUWORD(0,RssV)>fGETUWORD(0,RttV))); 5397cf9345cSTaylor Simpson fSETBITS(7,4,PdV,(fGETUWORD(1,RssV)>fGETUWORD(1,RttV))); 5407cf9345cSTaylor Simpson}) 5417cf9345cSTaylor Simpson 5427cf9345cSTaylor SimpsonQ6INSN(A4_vcmpweqi,"Pd4=vcmpw.eq(Rss32,#s8)",ATTRIBS(), 5437cf9345cSTaylor Simpson"Compare elements of two vectors ", 5447cf9345cSTaylor Simpson{ 5457cf9345cSTaylor Simpson fSETBITS(3,0,PdV,(fGETWORD(0,RssV)==siV)); 5467cf9345cSTaylor Simpson fSETBITS(7,4,PdV,(fGETWORD(1,RssV)==siV)); 5477cf9345cSTaylor Simpson}) 5487cf9345cSTaylor Simpson 5497cf9345cSTaylor SimpsonQ6INSN(A4_vcmpwgti,"Pd4=vcmpw.gt(Rss32,#s8)",ATTRIBS(), 5507cf9345cSTaylor Simpson"Compare elements of two vectors ", 5517cf9345cSTaylor Simpson{ 5527cf9345cSTaylor Simpson fSETBITS(3,0,PdV,(fGETWORD(0,RssV)>siV)); 5537cf9345cSTaylor Simpson fSETBITS(7,4,PdV,(fGETWORD(1,RssV)>siV)); 5547cf9345cSTaylor Simpson}) 5557cf9345cSTaylor Simpson 5567cf9345cSTaylor SimpsonQ6INSN(A4_vcmpwgtui,"Pd4=vcmpw.gtu(Rss32,#u7)",ATTRIBS(), 5577cf9345cSTaylor Simpson"Compare elements of two vectors ", 5587cf9345cSTaylor Simpson{ 5597cf9345cSTaylor Simpson fSETBITS(3,0,PdV,(fGETUWORD(0,RssV)>fCAST4u(uiV))); 5607cf9345cSTaylor Simpson fSETBITS(7,4,PdV,(fGETUWORD(1,RssV)>fCAST4u(uiV))); 5617cf9345cSTaylor Simpson}) 5627cf9345cSTaylor Simpson 5637cf9345cSTaylor SimpsonQ6INSN(A4_boundscheck_hi,"Pd4=boundscheck(Rss32,Rtt32):raw:hi",ATTRIBS(), 5647cf9345cSTaylor Simpson"Detect if a register is within bounds", 5657cf9345cSTaylor Simpson{ 5667cf9345cSTaylor Simpson fHIDE(size4u_t src;) 5677cf9345cSTaylor Simpson src = fGETUWORD(1,RssV); 5687cf9345cSTaylor Simpson PdV = f8BITSOF((fCAST4u(src) >= fGETUWORD(0,RttV)) && (fCAST4u(src) < fGETUWORD(1,RttV))); 5697cf9345cSTaylor Simpson}) 5707cf9345cSTaylor Simpson 5717cf9345cSTaylor SimpsonQ6INSN(A4_boundscheck_lo,"Pd4=boundscheck(Rss32,Rtt32):raw:lo",ATTRIBS(), 5727cf9345cSTaylor Simpson"Detect if a register is within bounds", 5737cf9345cSTaylor Simpson{ 5747cf9345cSTaylor Simpson fHIDE(size4u_t src;) 5757cf9345cSTaylor Simpson src = fGETUWORD(0,RssV); 5767cf9345cSTaylor Simpson PdV = f8BITSOF((fCAST4u(src) >= fGETUWORD(0,RttV)) && (fCAST4u(src) < fGETUWORD(1,RttV))); 5777cf9345cSTaylor Simpson}) 5787cf9345cSTaylor Simpson 5797cf9345cSTaylor SimpsonQ6INSN(A4_tlbmatch,"Pd4=tlbmatch(Rss32,Rt32)",ATTRIBS(), 5807cf9345cSTaylor Simpson"Detect if a VA/ASID matches a TLB entry", 5817cf9345cSTaylor Simpson{ 5827cf9345cSTaylor Simpson fHIDE(size4u_t TLBHI; size4u_t TLBLO; size4u_t MASK; size4u_t SIZE;) 5837cf9345cSTaylor Simpson MASK = 0x07ffffff; 5847cf9345cSTaylor Simpson TLBLO = fGETUWORD(0,RssV); 5857cf9345cSTaylor Simpson TLBHI = fGETUWORD(1,RssV); 5867cf9345cSTaylor Simpson SIZE = fMIN(6,fCL1_4(~fBREV_4(TLBLO))); 5877cf9345cSTaylor Simpson MASK &= (0xffffffff << 2*SIZE); 5887cf9345cSTaylor Simpson PdV = f8BITSOF(fGETBIT(31,TLBHI) && ((TLBHI & MASK) == (RtV & MASK))); 5897cf9345cSTaylor Simpson}) 5907cf9345cSTaylor Simpson 5917cf9345cSTaylor SimpsonQ6INSN(C2_tfrpr,"Rd32=Ps4",ATTRIBS(), 5927cf9345cSTaylor Simpson"Transfer predicate to general register", { RdV = fZXTN(8,32,PsV); }) 5937cf9345cSTaylor Simpson 5947cf9345cSTaylor SimpsonQ6INSN(C2_tfrrp,"Pd4=Rs32",ATTRIBS(), 5957cf9345cSTaylor Simpson"Transfer general register to Predicate", { PdV = fGETUBYTE(0,RsV); }) 5967cf9345cSTaylor Simpson 5977cf9345cSTaylor SimpsonQ6INSN(C4_fastcorner9,"Pd4=fastcorner9(Ps4,Pt4)",ATTRIBS(A_CRSLOT23), 5987cf9345cSTaylor Simpson"Determine whether the predicate sources define a corner", 5997cf9345cSTaylor Simpson{ 6007cf9345cSTaylor Simpson fHIDE(size4u_t tmp = 0; size4u_t i;) 6017cf9345cSTaylor Simpson fSETHALF(0,tmp,(PsV<<8)|PtV); 6027cf9345cSTaylor Simpson fSETHALF(1,tmp,(PsV<<8)|PtV); 6037cf9345cSTaylor Simpson for (i = 1; i < 9; i++) { 6047cf9345cSTaylor Simpson tmp &= tmp >> 1; 6057cf9345cSTaylor Simpson } 6067cf9345cSTaylor Simpson PdV = f8BITSOF(tmp != 0); 6077cf9345cSTaylor Simpson}) 6087cf9345cSTaylor Simpson 6097cf9345cSTaylor SimpsonQ6INSN(C4_fastcorner9_not,"Pd4=!fastcorner9(Ps4,Pt4)",ATTRIBS(A_CRSLOT23), 6107cf9345cSTaylor Simpson"Determine whether the predicate sources define a corner", 6117cf9345cSTaylor Simpson{ 6127cf9345cSTaylor Simpson fHIDE(size4u_t tmp = 0; size4u_t i;) 6137cf9345cSTaylor Simpson fSETHALF(0,tmp,(PsV<<8)|PtV); 6147cf9345cSTaylor Simpson fSETHALF(1,tmp,(PsV<<8)|PtV); 6157cf9345cSTaylor Simpson for (i = 1; i < 9; i++) { 6167cf9345cSTaylor Simpson tmp &= tmp >> 1; 6177cf9345cSTaylor Simpson } 6187cf9345cSTaylor Simpson PdV = f8BITSOF(tmp == 0); 6197cf9345cSTaylor Simpson}) 620