diff --git a/Ghidra/Processors/AARCH64/data/languages/AARCH64instructions.sinc b/Ghidra/Processors/AARCH64/data/languages/AARCH64instructions.sinc index 79716661ec..f4eea8485a 100644 --- a/Ghidra/Processors/AARCH64/data/languages/AARCH64instructions.sinc +++ b/Ghidra/Processors/AARCH64/data/languages/AARCH64instructions.sinc @@ -3265,7 +3265,6 @@ PACIXSP_BTITARGETS: is ShowBTI=0 { } define pcodeop SIMD_PIECE; -define pcodeop NEON_addv; define pcodeop NEON_aesd; define pcodeop NEON_aese; define pcodeop NEON_aesimc; @@ -3274,20 +3273,7 @@ define pcodeop NEON_bfdot; define pcodeop NEON_bfmlalb; define pcodeop NEON_bfmlalt; define pcodeop NEON_bfmmla; -define pcodeop NEON_bif; -define pcodeop NEON_bit; -define pcodeop NEON_bsl; define pcodeop NEON_cls; -define pcodeop NEON_clz; -define pcodeop NEON_cmeq; -define pcodeop NEON_cmge; -define pcodeop NEON_cmgt; -define pcodeop NEON_cmhi; -define pcodeop NEON_cmhs; -define pcodeop NEON_cmle; -define pcodeop NEON_cmlt; -define pcodeop NEON_cmtst; -define pcodeop NEON_cnt; define pcodeop NEON_ext; define pcodeop NEON_facge; define pcodeop NEON_facgt; @@ -3300,7 +3286,6 @@ define pcodeop NEON_fcmle; define pcodeop NEON_fcmlt; define pcodeop NEON_fcvtzs; define pcodeop NEON_fcvtzu; -define pcodeop NEON_fmadd; define pcodeop NEON_fmax; define pcodeop NEON_fmaxnm; define pcodeop NEON_fmaxnmp; @@ -3314,7 +3299,6 @@ define pcodeop NEON_fminnmv; define pcodeop NEON_fminp; define pcodeop NEON_fminv; define pcodeop NEON_fmov; -define pcodeop NEON_fmsub; define pcodeop NEON_fmulx; define pcodeop NEON_fnmadd; define pcodeop NEON_fnmsub; diff --git a/Ghidra/Processors/AARCH64/data/languages/AARCH64neon.sinc b/Ghidra/Processors/AARCH64/data/languages/AARCH64neon.sinc index 5ea80de355..0e61b3b22b 100644 --- a/Ghidra/Processors/AARCH64/data/languages/AARCH64neon.sinc +++ b/Ghidra/Processors/AARCH64/data/languages/AARCH64neon.sinc @@ -22,7 +22,8 @@ :abs Rd_FPR64, Rn_FPR64 is b_2431=0b01011110 & b_2223=0b11 & b_1021=0b100000101110 & Rd_FPR64 & Rn_FPR64 & Zd { - Rd_FPR64 = MP_INT_ABS(Rn_FPR64); + local test = Rn_FPR64 s< 0; + Rd_FPR64 = (zext(!test)*Rn_FPR64) + (zext(test)*(-Rn_FPR64)); zext_zd(Zd); # zero upper 24 bytes of Zd } @@ -717,7 +718,23 @@ is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR128.8H :addv Rd_FPR8, Rn_VPR128.16B is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x18 & b_1216=0x1b & b_1011=2 & Rn_VPR128.16B & Rd_FPR8 & Zd { - Rd_FPR8 = NEON_addv(Rn_VPR128.16B, 1:1); + Rd_FPR8 = Rn_VPR128.16B[0,8]; + Rd_FPR8 = Rd_FPR8 + Rn_VPR128.16B[8,8]; + Rd_FPR8 = Rd_FPR8 + Rn_VPR128.16B[16,8]; + Rd_FPR8 = Rd_FPR8 + Rn_VPR128.16B[24,8]; + Rd_FPR8 = Rd_FPR8 + Rn_VPR128.16B[32,8]; + Rd_FPR8 = Rd_FPR8 + Rn_VPR128.16B[40,8]; + Rd_FPR8 = Rd_FPR8 + Rn_VPR128.16B[48,8]; + Rd_FPR8 = Rd_FPR8 + Rn_VPR128.16B[56,8]; + Rd_FPR8 = Rd_FPR8 + Rn_VPR128.16B[64,8]; + Rd_FPR8 = Rd_FPR8 + Rn_VPR128.16B[72,8]; + Rd_FPR8 = Rd_FPR8 + Rn_VPR128.16B[80,8]; + Rd_FPR8 = Rd_FPR8 + Rn_VPR128.16B[88,8]; + Rd_FPR8 = Rd_FPR8 + Rn_VPR128.16B[96,8]; + Rd_FPR8 = Rd_FPR8 + Rn_VPR128.16B[104,8]; + Rd_FPR8 = Rd_FPR8 + Rn_VPR128.16B[112,8]; + Rd_FPR8 = Rd_FPR8 + Rn_VPR128.16B[120,8]; + zext_zq(Zd); # zero upper 31 bytes of Zd } # C7.2.6 ADDV page C7-2027 line 118452 MATCH x0e31b800/mask=xbf3ffc00 @@ -728,7 +745,15 @@ is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x18 & b_1216=0x :addv Rd_FPR8, Rn_VPR64.8B is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x18 & b_1216=0x1b & b_1011=2 & Rn_VPR64.8B & Rd_FPR8 & Zd { - Rd_FPR8 = NEON_addv(Rn_VPR64.8B, 1:1); + Rd_FPR8 = Rn_VPR64.8B[0,8]; + Rd_FPR8 = Rd_FPR8 + Rn_VPR64.8B[8,8]; + Rd_FPR8 = Rd_FPR8 + Rn_VPR64.8B[16,8]; + Rd_FPR8 = Rd_FPR8 + Rn_VPR64.8B[24,8]; + Rd_FPR8 = Rd_FPR8 + Rn_VPR64.8B[32,8]; + Rd_FPR8 = Rd_FPR8 + Rn_VPR64.8B[40,8]; + Rd_FPR8 = Rd_FPR8 + Rn_VPR64.8B[48,8]; + Rd_FPR8 = Rd_FPR8 + Rn_VPR64.8B[56,8]; + zext_zq(Zd); # zero upper 31 bytes of Zd } # C7.2.6 ADDV page C7-2027 line 118452 MATCH x0e31b800/mask=xbf3ffc00 @@ -739,7 +764,11 @@ is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x18 & b_1216=0x :addv Rd_FPR16, Rn_VPR64.4H is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x18 & b_1216=0x1b & b_1011=2 & Rn_VPR64.4H & Rd_FPR16 & Zd { - Rd_FPR16 = NEON_addv(Rn_VPR64.4H, 2:1); + Rd_FPR16 = Rn_VPR64.4H[0,16]; + Rd_FPR16 = Rd_FPR16 + Rn_VPR64.4H[16,16]; + Rd_FPR16 = Rd_FPR16 + Rn_VPR64.4H[32,16]; + Rd_FPR16 = Rd_FPR16 + Rn_VPR64.4H[48,16]; + zext_zh(Zd); # zero upper 30 bytes of Zd } # C7.2.6 ADDV page C7-2027 line 118452 MATCH x0e31b800/mask=xbf3ffc00 @@ -750,7 +779,15 @@ is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x18 & b_1216=0x :addv Rd_FPR16, Rn_VPR128.8H is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x18 & b_1216=0x1b & b_1011=2 & Rn_VPR128.8H & Rd_FPR16 & Zd { - Rd_FPR16 = NEON_addv(Rn_VPR128.8H, 2:1); + Rd_FPR16 = Rn_VPR128.8H[0,16]; + Rd_FPR16 = Rd_FPR16 + Rn_VPR128.8H[16,16]; + Rd_FPR16 = Rd_FPR16 + Rn_VPR128.8H[32,16]; + Rd_FPR16 = Rd_FPR16 + Rn_VPR128.8H[48,16]; + Rd_FPR16 = Rd_FPR16 + Rn_VPR128.8H[64,16]; + Rd_FPR16 = Rd_FPR16 + Rn_VPR128.8H[80,16]; + Rd_FPR16 = Rd_FPR16 + Rn_VPR128.8H[96,16]; + Rd_FPR16 = Rd_FPR16 + Rn_VPR128.8H[112,16]; + zext_zh(Zd); # zero upper 30 bytes of Zd } # C7.2.6 ADDV page C7-2027 line 118452 MATCH x0e31b800/mask=xbf3ffc00 @@ -1097,7 +1134,7 @@ is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR64.8B :bif Rd_VPR128.16B, Rn_VPR128.16B, Rm_VPR128.16B is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=3 & b_2121=1 & Rm_VPR128.16B & b_1115=0x3 & b_1010=1 & Rn_VPR128.16B & Rd_VPR128.16B & Zd { - Rd_VPR128.16B = NEON_bif(Rd_VPR128.16B, Rn_VPR128.16B, Rm_VPR128.16B, 1:1); + Rd_VPR128.16B = Rd_VPR128.16B ^ ((Rd_VPR128.16B ^ Rn_VPR128.16B) & ~Rm_VPR128.16B); } # C7.2.22 BIF page C7-2052 line 119791 MATCH x2ee01c00/mask=xbfe0fc00 @@ -1108,7 +1145,7 @@ is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=3 & b_2121=1 & Rm_VPR128.16 :bif Rd_VPR64.8B, Rn_VPR64.8B, Rm_VPR64.8B is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=3 & b_2121=1 & Rm_VPR64.8B & b_1115=0x3 & b_1010=1 & Rn_VPR64.8B & Rd_VPR64.8B & Zd { - Rd_VPR64.8B = NEON_bif(Rd_VPR64.8B, Rn_VPR64.8B, Rm_VPR64.8B, 1:1); + Rd_VPR64.8B = Rd_VPR64.8B ^ ((Rd_VPR64.8B ^ Rn_VPR64.8B) & ~Rm_VPR64.8B); } # C7.2.23 BIT page C7-2054 line 119875 MATCH x2ea01c00/mask=xbfe0fc00 @@ -1119,7 +1156,7 @@ is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=3 & b_2121=1 & Rm_VPR64.8B :bit Rd_VPR128.16B, Rn_VPR128.16B, Rm_VPR128.16B is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR128.16B & b_1115=0x3 & b_1010=1 & Rn_VPR128.16B & Rd_VPR128.16B & Zd { - Rd_VPR128.16B = NEON_bit(Rd_VPR128.16B, Rn_VPR128.16B, Rm_VPR128.16B, 1:1); + Rd_VPR128.16B = Rd_VPR128.16B ^ ((Rd_VPR128.16B ^ Rn_VPR128.16B) & Rm_VPR128.16B); } # C7.2.23 BIT page C7-2054 line 119875 MATCH x2ea01c00/mask=xbfe0fc00 @@ -1130,7 +1167,7 @@ is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR128.16 :bit Rd_VPR64.8B, Rn_VPR64.8B, Rm_VPR64.8B is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR64.8B & b_1115=0x3 & b_1010=1 & Rn_VPR64.8B & Rd_VPR64.8B & Zd { - Rd_VPR64.8B = NEON_bit(Rd_VPR64.8B, Rn_VPR64.8B, Rm_VPR64.8B, 1:1); + Rd_VPR64.8B = Rd_VPR64.8B ^ ((Rd_VPR64.8B ^ Rn_VPR64.8B) & Rm_VPR64.8B); } # C7.2.24 BSL page C7-2056 line 119959 MATCH x2e601c00/mask=xbfe0fc00 @@ -1141,7 +1178,7 @@ is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR64.8B :bsl Rd_VPR128.16B, Rn_VPR128.16B, Rm_VPR128.16B is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR128.16B & b_1115=0x3 & b_1010=1 & Rn_VPR128.16B & Rd_VPR128.16B & Zd { - Rd_VPR128.16B = NEON_bsl(Rd_VPR128.16B, Rn_VPR128.16B, Rm_VPR128.16B, 1:1); + Rd_VPR128.16B = Rm_VPR128.16B ^ ((Rm_VPR128.16B ^ Rn_VPR128.16B) & Rd_VPR128.16B); } # C7.2.24 BSL page C7-2056 line 119959 MATCH x2e601c00/mask=xbfe0fc00 @@ -1152,7 +1189,7 @@ is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR128.16 :bsl Rd_VPR64.8B, Rn_VPR64.8B, Rm_VPR64.8B is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR64.8B & b_1115=0x3 & b_1010=1 & Rn_VPR64.8B & Rd_VPR64.8B & Zd { - Rd_VPR64.8B = NEON_bsl(Rd_VPR64.8B, Rn_VPR64.8B, Rm_VPR64.8B, 1:1); + Rd_VPR64.8B = Rm_VPR64.8B ^ ((Rm_VPR64.8B ^ Rn_VPR64.8B) & Rd_VPR64.8B); } # C7.2.25 CLS (vector) page C7-2058 line 120043 MATCH x0e204800/mask=xbf3ffc00 @@ -1236,7 +1273,16 @@ is b_31=0 & b_30=1 & b_2429=0b001110 & b_2223=0b10 & b_1021=0b100000010010 & Rd_ :clz Rd_VPR64.8B, Rn_VPR64.8B is b_31=0 & b_30=0 & b_2429=0b101110 & b_2223=0b00 & b_1021=0b100000010010 & Rd_VPR64.8B & Rn_VPR64.8B & Zd { - Rd_VPR64.8B = NEON_clz(Rn_VPR64.8B, 1:1); + # simd unary Rd_VPR64.8B = lzcount(Rn_VPR64.8B) on lane size 1 + Rd_VPR64.8B[0,8] = lzcount(Rn_VPR64.8B[0,8]); + Rd_VPR64.8B[8,8] = lzcount(Rn_VPR64.8B[8,8]); + Rd_VPR64.8B[16,8] = lzcount(Rn_VPR64.8B[16,8]); + Rd_VPR64.8B[24,8] = lzcount(Rn_VPR64.8B[24,8]); + Rd_VPR64.8B[32,8] = lzcount(Rn_VPR64.8B[32,8]); + Rd_VPR64.8B[40,8] = lzcount(Rn_VPR64.8B[40,8]); + Rd_VPR64.8B[48,8] = lzcount(Rn_VPR64.8B[48,8]); + Rd_VPR64.8B[56,8] = lzcount(Rn_VPR64.8B[56,8]); + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.26 CLZ (vector) page C7-2060 line 120140 MATCH x2e204800/mask=xbf3ffc00 @@ -1248,7 +1294,24 @@ is b_31=0 & b_30=0 & b_2429=0b101110 & b_2223=0b00 & b_1021=0b100000010010 & Rd_ :clz Rd_VPR128.16B, Rn_VPR128.16B is b_31=0 & b_30=1 & b_2429=0b101110 & b_2223=0b00 & b_1021=0b100000010010 & Rd_VPR128.16B & Rn_VPR128.16B & Zd { - Rd_VPR128.16B = NEON_clz(Rn_VPR128.16B, 1:1); + # simd unary Rd_VPR128.16B = lzcount(Rn_VPR128.16B) on lane size 1 + Rd_VPR128.16B[0,8] = lzcount(Rn_VPR128.16B[0,8]); + Rd_VPR128.16B[8,8] = lzcount(Rn_VPR128.16B[8,8]); + Rd_VPR128.16B[16,8] = lzcount(Rn_VPR128.16B[16,8]); + Rd_VPR128.16B[24,8] = lzcount(Rn_VPR128.16B[24,8]); + Rd_VPR128.16B[32,8] = lzcount(Rn_VPR128.16B[32,8]); + Rd_VPR128.16B[40,8] = lzcount(Rn_VPR128.16B[40,8]); + Rd_VPR128.16B[48,8] = lzcount(Rn_VPR128.16B[48,8]); + Rd_VPR128.16B[56,8] = lzcount(Rn_VPR128.16B[56,8]); + Rd_VPR128.16B[64,8] = lzcount(Rn_VPR128.16B[64,8]); + Rd_VPR128.16B[72,8] = lzcount(Rn_VPR128.16B[72,8]); + Rd_VPR128.16B[80,8] = lzcount(Rn_VPR128.16B[80,8]); + Rd_VPR128.16B[88,8] = lzcount(Rn_VPR128.16B[88,8]); + Rd_VPR128.16B[96,8] = lzcount(Rn_VPR128.16B[96,8]); + Rd_VPR128.16B[104,8] = lzcount(Rn_VPR128.16B[104,8]); + Rd_VPR128.16B[112,8] = lzcount(Rn_VPR128.16B[112,8]); + Rd_VPR128.16B[120,8] = lzcount(Rn_VPR128.16B[120,8]); + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.26 CLZ (vector) page C7-2060 line 120140 MATCH x2e204800/mask=xbf3ffc00 @@ -1260,7 +1323,12 @@ is b_31=0 & b_30=1 & b_2429=0b101110 & b_2223=0b00 & b_1021=0b100000010010 & Rd_ :clz Rd_VPR64.4H, Rn_VPR64.4H is b_31=0 & b_30=0 & b_2429=0b101110 & b_2223=0b01 & b_1021=0b100000010010 & Rd_VPR64.4H & Rn_VPR64.4H & Zd { - Rd_VPR64.4H = NEON_clz(Rn_VPR64.4H, 2:1); + # simd unary Rd_VPR64.4H = lzcount(Rn_VPR64.4H) on lane size 2 + Rd_VPR64.4H[0,16] = lzcount(Rn_VPR64.4H[0,16]); + Rd_VPR64.4H[16,16] = lzcount(Rn_VPR64.4H[16,16]); + Rd_VPR64.4H[32,16] = lzcount(Rn_VPR64.4H[32,16]); + Rd_VPR64.4H[48,16] = lzcount(Rn_VPR64.4H[48,16]); + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.26 CLZ (vector) page C7-2060 line 120140 MATCH x2e204800/mask=xbf3ffc00 @@ -1272,7 +1340,16 @@ is b_31=0 & b_30=0 & b_2429=0b101110 & b_2223=0b01 & b_1021=0b100000010010 & Rd_ :clz Rd_VPR128.8H, Rn_VPR128.8H is b_31=0 & b_30=1 & b_2429=0b101110 & b_2223=0b01 & b_1021=0b100000010010 & Rd_VPR128.8H & Rn_VPR128.8H & Zd { - Rd_VPR128.8H = NEON_clz(Rn_VPR128.8H, 2:1); + # simd unary Rd_VPR128.8H = lzcount(Rn_VPR128.8H) on lane size 2 + Rd_VPR128.8H[0,16] = lzcount(Rn_VPR128.8H[0,16]); + Rd_VPR128.8H[16,16] = lzcount(Rn_VPR128.8H[16,16]); + Rd_VPR128.8H[32,16] = lzcount(Rn_VPR128.8H[32,16]); + Rd_VPR128.8H[48,16] = lzcount(Rn_VPR128.8H[48,16]); + Rd_VPR128.8H[64,16] = lzcount(Rn_VPR128.8H[64,16]); + Rd_VPR128.8H[80,16] = lzcount(Rn_VPR128.8H[80,16]); + Rd_VPR128.8H[96,16] = lzcount(Rn_VPR128.8H[96,16]); + Rd_VPR128.8H[112,16] = lzcount(Rn_VPR128.8H[112,16]); + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.26 CLZ (vector) page C7-2060 line 120140 MATCH x2e204800/mask=xbf3ffc00 @@ -1284,7 +1361,10 @@ is b_31=0 & b_30=1 & b_2429=0b101110 & b_2223=0b01 & b_1021=0b100000010010 & Rd_ :clz Rd_VPR64.2S, Rn_VPR64.2S is b_31=0 & b_30=0 & b_2429=0b101110 & b_2223=0b10 & b_1021=0b100000010010 & Rd_VPR64.2S & Rn_VPR64.2S & Zd { - Rd_VPR64.2S = NEON_clz(Rn_VPR64.2S, 4:1); + # simd unary Rd_VPR64.2S = lzcount(Rn_VPR64.2S) on lane size 4 + Rd_VPR64.2S[0,32] = lzcount(Rn_VPR64.2S[0,32]); + Rd_VPR64.2S[32,32] = lzcount(Rn_VPR64.2S[32,32]); + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.26 CLZ (vector) page C7-2060 line 120140 MATCH x2e204800/mask=xbf3ffc00 @@ -1296,7 +1376,12 @@ is b_31=0 & b_30=0 & b_2429=0b101110 & b_2223=0b10 & b_1021=0b100000010010 & Rd_ :clz Rd_VPR128.4S, Rn_VPR128.4S is b_31=0 & b_30=1 & b_2429=0b101110 & b_2223=0b10 & b_1021=0b100000010010 & Rd_VPR128.4S & Rn_VPR128.4S & Zd { - Rd_VPR128.4S = NEON_clz(Rn_VPR128.4S, 4:1); + # simd unary Rd_VPR128.4S = lzcount(Rn_VPR128.4S) on lane size 4 + Rd_VPR128.4S[0,32] = lzcount(Rn_VPR128.4S[0,32]); + Rd_VPR128.4S[32,32] = lzcount(Rn_VPR128.4S[32,32]); + Rd_VPR128.4S[64,32] = lzcount(Rn_VPR128.4S[64,32]); + Rd_VPR128.4S[96,32] = lzcount(Rn_VPR128.4S[96,32]); + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.27 CMEQ (register) page C7-2062 line 120236 MATCH x7e208c00/mask=xff20fc00 @@ -1325,7 +1410,16 @@ is b_2431=0b01111110 & b_2223=0b11 & b_21=1 & b_1015=0b100011 & Rd_FPR64 & Rn_FP :cmeq Rd_VPR64.8B, Rn_VPR64.8B, Rm_VPR64.8B is b_31=0 & b_30=0 & b_2429=0b101110 & b_2223=0b00 & b_21=1 & b_1015=0b100011 & Rd_VPR64.8B & Rn_VPR64.8B & Rm_VPR64.8B & Zd { - Rd_VPR64.8B = NEON_cmeq(Rn_VPR64.8B, Rm_VPR64.8B, 1:1); + local eqVal:1 = ~ 0; + Rd_VPR64.8B[0,8] = (Rn_VPR64.8B[0,8] == Rm_VPR64.8B[0,8]) * eqVal; + Rd_VPR64.8B[8,8] = (Rn_VPR64.8B[8,8] == Rm_VPR64.8B[8,8]) * eqVal; + Rd_VPR64.8B[16,8] = (Rn_VPR64.8B[16,8] == Rm_VPR64.8B[16,8]) * eqVal; + Rd_VPR64.8B[24,8] = (Rn_VPR64.8B[24,8] == Rm_VPR64.8B[24,8]) * eqVal; + Rd_VPR64.8B[32,8] = (Rn_VPR64.8B[32,8] == Rm_VPR64.8B[32,8]) * eqVal; + Rd_VPR64.8B[40,8] = (Rn_VPR64.8B[40,8] == Rm_VPR64.8B[40,8]) * eqVal; + Rd_VPR64.8B[48,8] = (Rn_VPR64.8B[48,8] == Rm_VPR64.8B[48,8]) * eqVal; + Rd_VPR64.8B[56,8] = (Rn_VPR64.8B[56,8] == Rm_VPR64.8B[56,8]) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.27 CMEQ (register) page C7-2062 line 120236 MATCH x2e208c00/mask=xbf20fc00 @@ -1337,7 +1431,24 @@ is b_31=0 & b_30=0 & b_2429=0b101110 & b_2223=0b00 & b_21=1 & b_1015=0b100011 & :cmeq Rd_VPR128.16B, Rn_VPR128.16B, Rm_VPR128.16B is b_31=0 & b_30=1 & b_2429=0b101110 & b_2223=0b00 & b_21=1 & b_1015=0b100011 & Rd_VPR128.16B & Rn_VPR128.16B & Rm_VPR128.16B & Zd { - Rd_VPR128.16B = NEON_cmeq(Rn_VPR128.16B, Rm_VPR128.16B, 1:1); + local eqVal:1 = ~ 0; + Rd_VPR128.16B[0,8] = (Rn_VPR128.16B[0,8] == Rm_VPR128.16B[0,8]) * eqVal; + Rd_VPR128.16B[8,8] = (Rn_VPR128.16B[8,8] == Rm_VPR128.16B[8,8]) * eqVal; + Rd_VPR128.16B[16,8] = (Rn_VPR128.16B[16,8] == Rm_VPR128.16B[16,8]) * eqVal; + Rd_VPR128.16B[24,8] = (Rn_VPR128.16B[24,8] == Rm_VPR128.16B[24,8]) * eqVal; + Rd_VPR128.16B[32,8] = (Rn_VPR128.16B[32,8] == Rm_VPR128.16B[32,8]) * eqVal; + Rd_VPR128.16B[40,8] = (Rn_VPR128.16B[40,8] == Rm_VPR128.16B[40,8]) * eqVal; + Rd_VPR128.16B[48,8] = (Rn_VPR128.16B[48,8] == Rm_VPR128.16B[48,8]) * eqVal; + Rd_VPR128.16B[56,8] = (Rn_VPR128.16B[56,8] == Rm_VPR128.16B[56,8]) * eqVal; + Rd_VPR128.16B[64,8] = (Rn_VPR128.16B[64,8] == Rm_VPR128.16B[64,8]) * eqVal; + Rd_VPR128.16B[72,8] = (Rn_VPR128.16B[72,8] == Rm_VPR128.16B[72,8]) * eqVal; + Rd_VPR128.16B[80,8] = (Rn_VPR128.16B[80,8] == Rm_VPR128.16B[80,8]) * eqVal; + Rd_VPR128.16B[88,8] = (Rn_VPR128.16B[88,8] == Rm_VPR128.16B[88,8]) * eqVal; + Rd_VPR128.16B[96,8] = (Rn_VPR128.16B[96,8] == Rm_VPR128.16B[96,8]) * eqVal; + Rd_VPR128.16B[104,8] = (Rn_VPR128.16B[104,8] == Rm_VPR128.16B[104,8]) * eqVal; + Rd_VPR128.16B[112,8] = (Rn_VPR128.16B[112,8] == Rm_VPR128.16B[112,8]) * eqVal; + Rd_VPR128.16B[120,8] = (Rn_VPR128.16B[120,8] == Rm_VPR128.16B[120,8]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.27 CMEQ (register) page C7-2062 line 120236 MATCH x2e208c00/mask=xbf20fc00 @@ -1349,7 +1460,12 @@ is b_31=0 & b_30=1 & b_2429=0b101110 & b_2223=0b00 & b_21=1 & b_1015=0b100011 & :cmeq Rd_VPR64.4H, Rn_VPR64.4H, Rm_VPR64.4H is b_31=0 & b_30=0 & b_2429=0b101110 & b_2223=0b01 & b_21=1 & b_1015=0b100011 & Rd_VPR64.4H & Rn_VPR64.4H & Rm_VPR64.4H & Zd { - Rd_VPR64.4H = NEON_cmeq(Rn_VPR64.4H, Rm_VPR64.4H, 2:1); + local eqVal:2 = ~ 0; + Rd_VPR64.4H[0,16] = zext(Rn_VPR64.4H[0,16] == Rm_VPR64.4H[0,16]) * eqVal; + Rd_VPR64.4H[16,16] = zext(Rn_VPR64.4H[16,16] == Rm_VPR64.4H[16,16]) * eqVal; + Rd_VPR64.4H[32,16] = zext(Rn_VPR64.4H[32,16] == Rm_VPR64.4H[32,16]) * eqVal; + Rd_VPR64.4H[48,16] = zext(Rn_VPR64.4H[48,16] == Rm_VPR64.4H[48,16]) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.27 CMEQ (register) page C7-2062 line 120236 MATCH x2e208c00/mask=xbf20fc00 @@ -1361,7 +1477,16 @@ is b_31=0 & b_30=0 & b_2429=0b101110 & b_2223=0b01 & b_21=1 & b_1015=0b100011 & :cmeq Rd_VPR128.8H, Rn_VPR128.8H, Rm_VPR128.8H is b_31=0 & b_30=1 & b_2429=0b101110 & b_2223=0b01 & b_21=1 & b_1015=0b100011 & Rd_VPR128.8H & Rn_VPR128.8H & Rm_VPR128.8H & Zd { - Rd_VPR128.8H = NEON_cmeq(Rn_VPR128.8H, Rm_VPR128.8H, 2:1); + local eqVal:2 = ~ 0; + Rd_VPR128.8H[0,16] = zext(Rn_VPR128.8H[0,16] == Rm_VPR128.8H[0,16]) * eqVal; + Rd_VPR128.8H[16,16] = zext(Rn_VPR128.8H[16,16] == Rm_VPR128.8H[16,16]) * eqVal; + Rd_VPR128.8H[32,16] = zext(Rn_VPR128.8H[32,16] == Rm_VPR128.8H[32,16]) * eqVal; + Rd_VPR128.8H[48,16] = zext(Rn_VPR128.8H[48,16] == Rm_VPR128.8H[48,16]) * eqVal; + Rd_VPR128.8H[64,16] = zext(Rn_VPR128.8H[64,16] == Rm_VPR128.8H[64,16]) * eqVal; + Rd_VPR128.8H[80,16] = zext(Rn_VPR128.8H[80,16] == Rm_VPR128.8H[80,16]) * eqVal; + Rd_VPR128.8H[96,16] = zext(Rn_VPR128.8H[96,16] == Rm_VPR128.8H[96,16]) * eqVal; + Rd_VPR128.8H[112,16] = zext(Rn_VPR128.8H[112,16] == Rm_VPR128.8H[112,16]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.27 CMEQ (register) page C7-2062 line 120236 MATCH x2e208c00/mask=xbf20fc00 @@ -1373,7 +1498,10 @@ is b_31=0 & b_30=1 & b_2429=0b101110 & b_2223=0b01 & b_21=1 & b_1015=0b100011 & :cmeq Rd_VPR64.2S, Rn_VPR64.2S, Rm_VPR64.2S is b_31=0 & b_30=0 & b_2429=0b101110 & b_2223=0b10 & b_21=1 & b_1015=0b100011 & Rd_VPR64.2S & Rn_VPR64.2S & Rm_VPR64.2S & Zd { - Rd_VPR64.2S = NEON_cmeq(Rn_VPR64.2S, Rm_VPR64.2S, 4:1); + local eqVal:4 = ~ 0; + Rd_VPR64.2S[0,32] = zext(Rn_VPR64.2S[0,32] == Rm_VPR64.2S[0,32]) * eqVal; + Rd_VPR64.2S[32,32] = zext(Rn_VPR64.2S[32,32] == Rm_VPR64.2S[32,32]) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.27 CMEQ (register) page C7-2062 line 120236 MATCH x2e208c00/mask=xbf20fc00 @@ -1385,7 +1513,12 @@ is b_31=0 & b_30=0 & b_2429=0b101110 & b_2223=0b10 & b_21=1 & b_1015=0b100011 & :cmeq Rd_VPR128.4S, Rn_VPR128.4S, Rm_VPR128.4S is b_31=0 & b_30=1 & b_2429=0b101110 & b_2223=0b10 & b_21=1 & b_1015=0b100011 & Rd_VPR128.4S & Rn_VPR128.4S & Rm_VPR128.4S & Zd { - Rd_VPR128.4S = NEON_cmeq(Rn_VPR128.4S, Rm_VPR128.4S, 4:1); + local eqVal:4 = ~ 0; + Rd_VPR128.4S[0,32] = zext(Rn_VPR128.4S[0,32] == Rm_VPR128.4S[0,32]) * eqVal; + Rd_VPR128.4S[32,32] = zext(Rn_VPR128.4S[32,32] == Rm_VPR128.4S[32,32]) * eqVal; + Rd_VPR128.4S[64,32] = zext(Rn_VPR128.4S[64,32] == Rm_VPR128.4S[64,32]) * eqVal; + Rd_VPR128.4S[96,32] = zext(Rn_VPR128.4S[96,32] == Rm_VPR128.4S[96,32]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.27 CMEQ (register) page C7-2062 line 120236 MATCH x2e208c00/mask=xbf20fc00 @@ -1397,84 +1530,10 @@ is b_31=0 & b_30=1 & b_2429=0b101110 & b_2223=0b10 & b_21=1 & b_1015=0b100011 & :cmeq Rd_VPR128.2D, Rn_VPR128.2D, Rm_VPR128.2D is b_31=0 & b_30=1 & b_2429=0b101110 & b_2223=0b11 & b_21=1 & b_1015=0b100011 & Rd_VPR128.2D & Rn_VPR128.2D & Rm_VPR128.2D & Zd { - Rd_VPR128.2D = NEON_cmeq(Rn_VPR128.2D, Rm_VPR128.2D, 8:1); -} - -# C7.2.28 CMEQ (zero) page C7-2064 line 120376 MATCH x0e209800/mask=xbf3ffc00 -# CONSTRUCT x4e209800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:1 =NEON_cmeq/2@1 -# AUNIT --inst x4e209800/mask=xfffffc00 --status nopcodeop - -:cmeq Rd_VPR128.16B, Rn_VPR128.16B, "#0" -is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR128.16B & Rd_VPR128.16B & Zd -{ - Rd_VPR128.16B = NEON_cmeq(Rn_VPR128.16B, 0:1, 1:1); -} - -# C7.2.28 CMEQ (zero) page C7-2064 line 120376 MATCH x0e209800/mask=xbf3ffc00 -# CONSTRUCT x4ee09800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:8 =NEON_cmeq/2@8 -# AUNIT --inst x4ee09800/mask=xfffffc00 --status nopcodeop - -:cmeq Rd_VPR128.2D, Rn_VPR128.2D, "#0" -is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=3 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR128.2D & Rd_VPR128.2D & Zd -{ - Rd_VPR128.2D = NEON_cmeq(Rn_VPR128.2D, 0:8, 8:1); -} - -# C7.2.28 CMEQ (zero) page C7-2064 line 120376 MATCH x0e209800/mask=xbf3ffc00 -# CONSTRUCT x0ea09800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_cmeq/2@4 -# AUNIT --inst x0ea09800/mask=xfffffc00 --status nopcodeop - -:cmeq Rd_VPR64.2S, Rn_VPR64.2S, "#0" -is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR64.2S & Rd_VPR64.2S & Zd -{ - Rd_VPR64.2S = NEON_cmeq(Rn_VPR64.2S, 0:4, 4:1); -} - -# C7.2.28 CMEQ (zero) page C7-2064 line 120376 MATCH x0e209800/mask=xbf3ffc00 -# CONSTRUCT x0e609800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:2 =NEON_cmeq/2@2 -# AUNIT --inst x0e609800/mask=xfffffc00 --status nopcodeop - -:cmeq Rd_VPR64.4H, Rn_VPR64.4H, "#0" -is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR64.4H & Rd_VPR64.4H & Zd -{ - Rd_VPR64.4H = NEON_cmeq(Rn_VPR64.4H, 0:2, 2:1); -} - -# C7.2.28 CMEQ (zero) page C7-2064 line 120376 MATCH x0e209800/mask=xbf3ffc00 -# CONSTRUCT x4ea09800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_cmeq/2@2 -# AUNIT --inst x4ea09800/mask=xfffffc00 --status nopcodeop - -:cmeq Rd_VPR128.4S, Rn_VPR128.4S, "#0" -is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR128.4S & Rd_VPR128.4S & Zd -{ - Rd_VPR128.4S = NEON_cmeq(Rn_VPR128.4S, 0:4, 2:1); -} - -# C7.2.28 CMEQ (zero) page C7-2064 line 120376 MATCH x0e209800/mask=xbf3ffc00 -# CONSTRUCT x0e209800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:1 =NEON_cmeq/2@1 -# AUNIT --inst x0e209800/mask=xfffffc00 --status nopcodeop - -:cmeq Rd_VPR64.8B, Rn_VPR64.8B, "#0" -is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR64.8B & Rd_VPR64.8B & Zd -{ - Rd_VPR64.8B = NEON_cmeq(Rn_VPR64.8B, 0:1, 1:1); -} - -# C7.2.28 CMEQ (zero) page C7-2064 line 120376 MATCH x0e209800/mask=xbf3ffc00 -# CONSTRUCT x4e609800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:2 =NEON_cmeq/2@2 -# AUNIT --inst x4e609800/mask=xfffffc00 --status nopcodeop - -:cmeq Rd_VPR128.8H, Rn_VPR128.8H, "#0" -is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR128.8H & Rd_VPR128.8H & Zd -{ - Rd_VPR128.8H = NEON_cmeq(Rn_VPR128.8H, 0:2, 2:1); + local eqVal:8 = ~ 0; + Rd_VPR128.2D[0,64] = zext(Rn_VPR128.2D[0,64] == Rm_VPR128.2D[0,64]) * eqVal; + Rd_VPR128.2D[64,64] = zext(Rn_VPR128.2D[64,64] == Rm_VPR128.2D[64,64]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.28 CMEQ (zero) page C7-2064 line 120376 MATCH x5e209800/mask=xff3ffc00 @@ -1485,62 +1544,162 @@ is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x10 & b_1216=0x :cmeq Rd_FPR64, Rn_FPR64, "#0" is b_2431=0b01011110 & b_2223=0b11 & b_1021=0b100000100110 & Rd_FPR64 & Rn_FPR64 & Zd { - Rd_FPR64 = NEON_cmeq(Rn_FPR64, 0:4); + local tmp1:1 = Rn_FPR64 == 0; + local tmp2:8 = zext(tmp1); + local tmp3:8 = ~ 0:8; + Rd_FPR64 = tmp2 * tmp3; + zext_zd(Zd); # zero upper 24 bytes of Zd } -# C7.2.29 CMGE (register) page C7-2067 line 120534 MATCH x0e203c00/mask=xbf20fc00 -# CONSTRUCT x4e203c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmge/2@1 -# AUNIT --inst x4e203c00/mask=xffe0fc00 --status nopcodeop +# C7.2.28 CMEQ (zero) page C7-2064 line 120376 MATCH x0e209800/mask=xbf3ffc00 +# CONSTRUCT x0e209800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:1 =NEON_cmeq/2@1 +# AUNIT --inst x0e209800/mask=xfffffc00 --status nopcodeop -:cmge Rd_VPR128.16B, Rn_VPR128.16B, Rm_VPR128.16B -is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_2121=1 & Rm_VPR128.16B & b_1115=0x7 & b_1010=1 & Rn_VPR128.16B & Rd_VPR128.16B & Zd +:cmeq Rd_VPR64.8B, Rn_VPR64.8B, "#0" +is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR64.8B & Rd_VPR64.8B & Zd { - Rd_VPR128.16B = NEON_cmge(Rn_VPR128.16B, Rm_VPR128.16B, 1:1); + local eqVal:1 = ~ 0; + local zero:1 = 0; + Rd_VPR64.8B[0,8] = (Rn_VPR64.8B[0,8] == zero) * eqVal; + Rd_VPR64.8B[8,8] = (Rn_VPR64.8B[8,8] == zero) * eqVal; + Rd_VPR64.8B[16,8] = (Rn_VPR64.8B[16,8] == zero) * eqVal; + Rd_VPR64.8B[24,8] = (Rn_VPR64.8B[24,8] == zero) * eqVal; + Rd_VPR64.8B[32,8] = (Rn_VPR64.8B[32,8] == zero) * eqVal; + Rd_VPR64.8B[40,8] = (Rn_VPR64.8B[40,8] == zero) * eqVal; + Rd_VPR64.8B[48,8] = (Rn_VPR64.8B[48,8] == zero) * eqVal; + Rd_VPR64.8B[56,8] = (Rn_VPR64.8B[56,8] == zero) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } -# C7.2.29 CMGE (register) page C7-2067 line 120534 MATCH x0e203c00/mask=xbf20fc00 -# CONSTRUCT x4ee03c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmge/2@8 -# AUNIT --inst x4ee03c00/mask=xffe0fc00 --status nopcodeop +# C7.2.28 CMEQ (zero) page C7-2064 line 120376 MATCH x0e209800/mask=xbf3ffc00 +# CONSTRUCT x4e209800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:1 =NEON_cmeq/2@1 +# AUNIT --inst x4e209800/mask=xfffffc00 --status nopcodeop -:cmge Rd_VPR128.2D, Rn_VPR128.2D, Rm_VPR128.2D -is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=3 & b_2121=1 & Rm_VPR128.2D & b_1115=0x7 & b_1010=1 & Rn_VPR128.2D & Rd_VPR128.2D & Zd +:cmeq Rd_VPR128.16B, Rn_VPR128.16B, "#0" +is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR128.16B & Rd_VPR128.16B & Zd { - Rd_VPR128.2D = NEON_cmge(Rn_VPR128.2D, Rm_VPR128.2D, 8:1); + local eqVal:1 = ~ 0; + local zero:1 = 0; + Rd_VPR128.16B[0,8] = (Rn_VPR128.16B[0,8] == zero) * eqVal; + Rd_VPR128.16B[8,8] = (Rn_VPR128.16B[8,8] == zero) * eqVal; + Rd_VPR128.16B[16,8] = (Rn_VPR128.16B[16,8] == zero) * eqVal; + Rd_VPR128.16B[24,8] = (Rn_VPR128.16B[24,8] == zero) * eqVal; + Rd_VPR128.16B[32,8] = (Rn_VPR128.16B[32,8] == zero) * eqVal; + Rd_VPR128.16B[40,8] = (Rn_VPR128.16B[40,8] == zero) * eqVal; + Rd_VPR128.16B[48,8] = (Rn_VPR128.16B[48,8] == zero) * eqVal; + Rd_VPR128.16B[56,8] = (Rn_VPR128.16B[56,8] == zero) * eqVal; + Rd_VPR128.16B[64,8] = (Rn_VPR128.16B[64,8] == zero) * eqVal; + Rd_VPR128.16B[72,8] = (Rn_VPR128.16B[72,8] == zero) * eqVal; + Rd_VPR128.16B[80,8] = (Rn_VPR128.16B[80,8] == zero) * eqVal; + Rd_VPR128.16B[88,8] = (Rn_VPR128.16B[88,8] == zero) * eqVal; + Rd_VPR128.16B[96,8] = (Rn_VPR128.16B[96,8] == zero) * eqVal; + Rd_VPR128.16B[104,8] = (Rn_VPR128.16B[104,8] == zero) * eqVal; + Rd_VPR128.16B[112,8] = (Rn_VPR128.16B[112,8] == zero) * eqVal; + Rd_VPR128.16B[120,8] = (Rn_VPR128.16B[120,8] == zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } -# C7.2.29 CMGE (register) page C7-2067 line 120534 MATCH x0e203c00/mask=xbf20fc00 -# CONSTRUCT x0ea03c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmge/2@4 -# AUNIT --inst x0ea03c00/mask=xffe0fc00 --status nopcodeop +# C7.2.28 CMEQ (zero) page C7-2064 line 120376 MATCH x0e209800/mask=xbf3ffc00 +# CONSTRUCT x0e609800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:2 =NEON_cmeq/2@2 +# AUNIT --inst x0e609800/mask=xfffffc00 --status nopcodeop -:cmge Rd_VPR64.2S, Rn_VPR64.2S, Rm_VPR64.2S -is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR64.2S & b_1115=0x7 & b_1010=1 & Rn_VPR64.2S & Rd_VPR64.2S & Zd +:cmeq Rd_VPR64.4H, Rn_VPR64.4H, "#0" +is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR64.4H & Rd_VPR64.4H & Zd { - Rd_VPR64.2S = NEON_cmge(Rn_VPR64.2S, Rm_VPR64.2S, 4:1); + local eqVal:2 = ~ 0; + local zero:2 = 0; + Rd_VPR64.4H[0,16] = zext(Rn_VPR64.4H[0,16] == zero) * eqVal; + Rd_VPR64.4H[16,16] = zext(Rn_VPR64.4H[16,16] == zero) * eqVal; + Rd_VPR64.4H[32,16] = zext(Rn_VPR64.4H[32,16] == zero) * eqVal; + Rd_VPR64.4H[48,16] = zext(Rn_VPR64.4H[48,16] == zero) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } -# C7.2.29 CMGE (register) page C7-2067 line 120534 MATCH x0e203c00/mask=xbf20fc00 -# CONSTRUCT x0e603c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmge/2@2 -# AUNIT --inst x0e603c00/mask=xffe0fc00 --status nopcodeop +# C7.2.28 CMEQ (zero) page C7-2064 line 120376 MATCH x0e209800/mask=xbf3ffc00 +# CONSTRUCT x4e609800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:2 =NEON_cmeq/2@2 +# AUNIT --inst x4e609800/mask=xfffffc00 --status nopcodeop -:cmge Rd_VPR64.4H, Rn_VPR64.4H, Rm_VPR64.4H -is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR64.4H & b_1115=0x7 & b_1010=1 & Rn_VPR64.4H & Rd_VPR64.4H & Zd +:cmeq Rd_VPR128.8H, Rn_VPR128.8H, "#0" +is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR128.8H & Rd_VPR128.8H & Zd { - Rd_VPR64.4H = NEON_cmge(Rn_VPR64.4H, Rm_VPR64.4H, 2:1); + local eqVal:2 = ~ 0; + local zero:2 = 0; + Rd_VPR128.8H[0,16] = zext(Rn_VPR128.8H[0,16] == zero) * eqVal; + Rd_VPR128.8H[16,16] = zext(Rn_VPR128.8H[16,16] == zero) * eqVal; + Rd_VPR128.8H[32,16] = zext(Rn_VPR128.8H[32,16] == zero) * eqVal; + Rd_VPR128.8H[48,16] = zext(Rn_VPR128.8H[48,16] == zero) * eqVal; + Rd_VPR128.8H[64,16] = zext(Rn_VPR128.8H[64,16] == zero) * eqVal; + Rd_VPR128.8H[80,16] = zext(Rn_VPR128.8H[80,16] == zero) * eqVal; + Rd_VPR128.8H[96,16] = zext(Rn_VPR128.8H[96,16] == zero) * eqVal; + Rd_VPR128.8H[112,16] = zext(Rn_VPR128.8H[112,16] == zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } -# C7.2.29 CMGE (register) page C7-2067 line 120534 MATCH x0e203c00/mask=xbf20fc00 -# CONSTRUCT x4ea03c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmge/2@4 -# AUNIT --inst x4ea03c00/mask=xffe0fc00 --status nopcodeop +# C7.2.28 CMEQ (zero) page C7-2064 line 120376 MATCH x0e209800/mask=xbf3ffc00 +# CONSTRUCT x0ea09800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_cmeq/2@4 +# AUNIT --inst x0ea09800/mask=xfffffc00 --status nopcodeop -:cmge Rd_VPR128.4S, Rn_VPR128.4S, Rm_VPR128.4S -is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR128.4S & b_1115=0x7 & b_1010=1 & Rn_VPR128.4S & Rd_VPR128.4S & Zd +:cmeq Rd_VPR64.2S, Rn_VPR64.2S, "#0" +is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR64.2S & Rd_VPR64.2S & Zd { - Rd_VPR128.4S = NEON_cmge(Rn_VPR128.4S, Rm_VPR128.4S, 4:1); + local eqVal:4 = ~ 0; + local zero:4 = 0; + Rd_VPR64.2S[0,32] = zext(Rn_VPR64.2S[0,32] == zero) * eqVal; + Rd_VPR64.2S[32,32] = zext(Rn_VPR64.2S[32,32] == zero) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd +} + +# C7.2.28 CMEQ (zero) page C7-2064 line 120376 MATCH x0e209800/mask=xbf3ffc00 +# CONSTRUCT x4ea09800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_cmeq/2@2 +# AUNIT --inst x4ea09800/mask=xfffffc00 --status nopcodeop + +:cmeq Rd_VPR128.4S, Rn_VPR128.4S, "#0" +is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR128.4S & Rd_VPR128.4S & Zd +{ + local eqVal:4 = ~ 0; + local zero:4 = 0; + Rd_VPR128.4S[0,32] = zext(Rn_VPR128.4S[0,32] == zero) * eqVal; + Rd_VPR128.4S[32,32] = zext(Rn_VPR128.4S[32,32] == zero) * eqVal; + Rd_VPR128.4S[64,32] = zext(Rn_VPR128.4S[64,32] == zero) * eqVal; + Rd_VPR128.4S[96,32] = zext(Rn_VPR128.4S[96,32] == zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd +} + +# C7.2.28 CMEQ (zero) page C7-2064 line 120376 MATCH x0e209800/mask=xbf3ffc00 +# CONSTRUCT x4ee09800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:8 =NEON_cmeq/2@8 +# AUNIT --inst x4ee09800/mask=xfffffc00 --status nopcodeop + +:cmeq Rd_VPR128.2D, Rn_VPR128.2D, "#0" +is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=3 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR128.2D & Rd_VPR128.2D & Zd +{ + local eqVal:8 = ~ 0; + local zero:8 = 0; + Rd_VPR128.2D[0,64] = zext(Rn_VPR128.2D[0,64] == zero) * eqVal; + Rd_VPR128.2D[64,64] = zext(Rn_VPR128.2D[64,64] == zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd +} + + +# C7.2.29 CMGE (register) page C7-2067 line 120534 MATCH x5e203c00/mask=xff20fc00 +# CONSTRUCT x5ee03c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmge/2 +# AUNIT --inst x5ee03c00/mask=xffe0fc00 --status nopcodeop + +:cmge Rd_FPR64, Rn_FPR64, Rm_FPR64 +is b_2431=0b01011110 & b_2223=0b11 & b_21=1 & b_1015=0b001111 & Rd_FPR64 & Rn_FPR64 & Rm_FPR64 & Zd +{ + local tmp1:1 = Rn_FPR64 s>= Rm_FPR64; + local tmp2:8 = zext(tmp1); + local tmp3:8 = ~ 0:8; + Rd_FPR64 = tmp2 * tmp3; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.29 CMGE (register) page C7-2067 line 120534 MATCH x0e203c00/mask=xbf20fc00 @@ -1551,7 +1710,60 @@ is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR128.4S :cmge Rd_VPR64.8B, Rn_VPR64.8B, Rm_VPR64.8B is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_2121=1 & Rm_VPR64.8B & b_1115=0x7 & b_1010=1 & Rn_VPR64.8B & Rd_VPR64.8B & Zd { - Rd_VPR64.8B = NEON_cmge(Rn_VPR64.8B, Rm_VPR64.8B, 1:1); + local eqVal:1 = ~ 0; + Rd_VPR64.8B[0,8] = (Rn_VPR64.8B[0,8] s>= Rm_VPR64.8B[0,8]) * eqVal; + Rd_VPR64.8B[8,8] = (Rn_VPR64.8B[8,8] s>= Rm_VPR64.8B[8,8]) * eqVal; + Rd_VPR64.8B[16,8] = (Rn_VPR64.8B[16,8] s>= Rm_VPR64.8B[16,8]) * eqVal; + Rd_VPR64.8B[24,8] = (Rn_VPR64.8B[24,8] s>= Rm_VPR64.8B[24,8]) * eqVal; + Rd_VPR64.8B[32,8] = (Rn_VPR64.8B[32,8] s>= Rm_VPR64.8B[32,8]) * eqVal; + Rd_VPR64.8B[40,8] = (Rn_VPR64.8B[40,8] s>= Rm_VPR64.8B[40,8]) * eqVal; + Rd_VPR64.8B[48,8] = (Rn_VPR64.8B[48,8] s>= Rm_VPR64.8B[48,8]) * eqVal; + Rd_VPR64.8B[56,8] = (Rn_VPR64.8B[56,8] s>= Rm_VPR64.8B[56,8]) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd +} + +# C7.2.29 CMGE (register) page C7-2067 line 120534 MATCH x0e203c00/mask=xbf20fc00 +# CONSTRUCT x4e203c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmge/2@1 +# AUNIT --inst x4e203c00/mask=xffe0fc00 --status nopcodeop + +:cmge Rd_VPR128.16B, Rn_VPR128.16B, Rm_VPR128.16B +is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_2121=1 & Rm_VPR128.16B & b_1115=0x7 & b_1010=1 & Rn_VPR128.16B & Rd_VPR128.16B & Zd +{ + local eqVal:1 = ~ 0; + Rd_VPR128.16B[0,8] = (Rn_VPR128.16B[0,8] s>= Rm_VPR128.16B[0,8]) * eqVal; + Rd_VPR128.16B[8,8] = (Rn_VPR128.16B[8,8] s>= Rm_VPR128.16B[8,8]) * eqVal; + Rd_VPR128.16B[16,8] = (Rn_VPR128.16B[16,8] s>= Rm_VPR128.16B[16,8]) * eqVal; + Rd_VPR128.16B[24,8] = (Rn_VPR128.16B[24,8] s>= Rm_VPR128.16B[24,8]) * eqVal; + Rd_VPR128.16B[32,8] = (Rn_VPR128.16B[32,8] s>= Rm_VPR128.16B[32,8]) * eqVal; + Rd_VPR128.16B[40,8] = (Rn_VPR128.16B[40,8] s>= Rm_VPR128.16B[40,8]) * eqVal; + Rd_VPR128.16B[48,8] = (Rn_VPR128.16B[48,8] s>= Rm_VPR128.16B[48,8]) * eqVal; + Rd_VPR128.16B[56,8] = (Rn_VPR128.16B[56,8] s>= Rm_VPR128.16B[56,8]) * eqVal; + Rd_VPR128.16B[64,8] = (Rn_VPR128.16B[64,8] s>= Rm_VPR128.16B[64,8]) * eqVal; + Rd_VPR128.16B[72,8] = (Rn_VPR128.16B[72,8] s>= Rm_VPR128.16B[72,8]) * eqVal; + Rd_VPR128.16B[80,8] = (Rn_VPR128.16B[80,8] s>= Rm_VPR128.16B[80,8]) * eqVal; + Rd_VPR128.16B[88,8] = (Rn_VPR128.16B[88,8] s>= Rm_VPR128.16B[88,8]) * eqVal; + Rd_VPR128.16B[96,8] = (Rn_VPR128.16B[96,8] s>= Rm_VPR128.16B[96,8]) * eqVal; + Rd_VPR128.16B[104,8] = (Rn_VPR128.16B[104,8] s>= Rm_VPR128.16B[104,8]) * eqVal; + Rd_VPR128.16B[112,8] = (Rn_VPR128.16B[112,8] s>= Rm_VPR128.16B[112,8]) * eqVal; + Rd_VPR128.16B[120,8] = (Rn_VPR128.16B[120,8] s>= Rm_VPR128.16B[120,8]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd +} + +# C7.2.29 CMGE (register) page C7-2067 line 120534 MATCH x0e203c00/mask=xbf20fc00 +# CONSTRUCT x0e603c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmge/2@2 +# AUNIT --inst x0e603c00/mask=xffe0fc00 --status nopcodeop + +:cmge Rd_VPR64.4H, Rn_VPR64.4H, Rm_VPR64.4H +is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR64.4H & b_1115=0x7 & b_1010=1 & Rn_VPR64.4H & Rd_VPR64.4H & Zd +{ + local eqVal:2 = ~ 0; + Rd_VPR64.4H[0,16] = zext(Rn_VPR64.4H[0,16] s>= Rm_VPR64.4H[0,16]) * eqVal; + Rd_VPR64.4H[16,16] = zext(Rn_VPR64.4H[16,16] s>= Rm_VPR64.4H[16,16]) * eqVal; + Rd_VPR64.4H[32,16] = zext(Rn_VPR64.4H[32,16] s>= Rm_VPR64.4H[32,16]) * eqVal; + Rd_VPR64.4H[48,16] = zext(Rn_VPR64.4H[48,16] s>= Rm_VPR64.4H[48,16]) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.29 CMGE (register) page C7-2067 line 120534 MATCH x0e203c00/mask=xbf20fc00 @@ -1562,95 +1774,60 @@ is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_2121=1 & Rm_VPR64.8B :cmge Rd_VPR128.8H, Rn_VPR128.8H, Rm_VPR128.8H is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR128.8H & b_1115=0x7 & b_1010=1 & Rn_VPR128.8H & Rd_VPR128.8H & Zd { - Rd_VPR128.8H = NEON_cmge(Rn_VPR128.8H, Rm_VPR128.8H, 2:1); + local eqVal:2 = ~ 0; + Rd_VPR128.8H[0,16] = zext(Rn_VPR128.8H[0,16] s>= Rm_VPR128.8H[0,16]) * eqVal; + Rd_VPR128.8H[16,16] = zext(Rn_VPR128.8H[16,16] s>= Rm_VPR128.8H[16,16]) * eqVal; + Rd_VPR128.8H[32,16] = zext(Rn_VPR128.8H[32,16] s>= Rm_VPR128.8H[32,16]) * eqVal; + Rd_VPR128.8H[48,16] = zext(Rn_VPR128.8H[48,16] s>= Rm_VPR128.8H[48,16]) * eqVal; + Rd_VPR128.8H[64,16] = zext(Rn_VPR128.8H[64,16] s>= Rm_VPR128.8H[64,16]) * eqVal; + Rd_VPR128.8H[80,16] = zext(Rn_VPR128.8H[80,16] s>= Rm_VPR128.8H[80,16]) * eqVal; + Rd_VPR128.8H[96,16] = zext(Rn_VPR128.8H[96,16] s>= Rm_VPR128.8H[96,16]) * eqVal; + Rd_VPR128.8H[112,16] = zext(Rn_VPR128.8H[112,16] s>= Rm_VPR128.8H[112,16]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } -# C7.2.29 CMGE (register) page C7-2067 line 120534 MATCH x5e203c00/mask=xff20fc00 -# CONSTRUCT x5ee03c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmge/2 -# AUNIT --inst x5ee03c00/mask=xffe0fc00 --status nopcodeop +# C7.2.29 CMGE (register) page C7-2067 line 120534 MATCH x0e203c00/mask=xbf20fc00 +# CONSTRUCT x0ea03c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmge/2@4 +# AUNIT --inst x0ea03c00/mask=xffe0fc00 --status nopcodeop -:cmge Rd_FPR64, Rn_FPR64, Rm_FPR64 -is b_2431=0b01011110 & b_2223=0b11 & b_21=1 & b_1015=0b001111 & Rd_FPR64 & Rn_FPR64 & Rm_FPR64 & Zd +:cmge Rd_VPR64.2S, Rn_VPR64.2S, Rm_VPR64.2S +is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR64.2S & b_1115=0x7 & b_1010=1 & Rn_VPR64.2S & Rd_VPR64.2S & Zd { - Rd_FPR64 = NEON_cmge(Rn_FPR64, Rm_FPR64); + local eqVal:4 = ~ 0; + Rd_VPR64.2S[0,32] = zext(Rn_VPR64.2S[0,32] s>= Rm_VPR64.2S[0,32]) * eqVal; + Rd_VPR64.2S[32,32] = zext(Rn_VPR64.2S[32,32] s>= Rm_VPR64.2S[32,32]) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } -# C7.2.30 CMGE (zero) page C7-2070 line 120683 MATCH x2e208800/mask=xbf3ffc00 -# CONSTRUCT x6e208800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:1 =NEON_cmge/2@1 -# AUNIT --inst x6e208800/mask=xfffffc00 --status nopcodeop +# C7.2.29 CMGE (register) page C7-2067 line 120534 MATCH x0e203c00/mask=xbf20fc00 +# CONSTRUCT x4ea03c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmge/2@4 +# AUNIT --inst x4ea03c00/mask=xffe0fc00 --status nopcodeop -:cmge Rd_VPR128.16B, Rn_VPR128.16B, "#0" -is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR128.16B & Rd_VPR128.16B & Zd +:cmge Rd_VPR128.4S, Rn_VPR128.4S, Rm_VPR128.4S +is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR128.4S & b_1115=0x7 & b_1010=1 & Rn_VPR128.4S & Rd_VPR128.4S & Zd { - Rd_VPR128.16B = NEON_cmge(Rn_VPR128.16B, 0:1, 1:1); + local eqVal:4 = ~ 0; + Rd_VPR128.4S[0,32] = zext(Rn_VPR128.4S[0,32] s>= Rm_VPR128.4S[0,32]) * eqVal; + Rd_VPR128.4S[32,32] = zext(Rn_VPR128.4S[32,32] s>= Rm_VPR128.4S[32,32]) * eqVal; + Rd_VPR128.4S[64,32] = zext(Rn_VPR128.4S[64,32] s>= Rm_VPR128.4S[64,32]) * eqVal; + Rd_VPR128.4S[96,32] = zext(Rn_VPR128.4S[96,32] s>= Rm_VPR128.4S[96,32]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } -# C7.2.30 CMGE (zero) page C7-2070 line 120683 MATCH x2e208800/mask=xbf3ffc00 -# CONSTRUCT x6ee08800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:8 =NEON_cmge/2@8 -# AUNIT --inst x6ee08800/mask=xfffffc00 --status nopcodeop +# C7.2.29 CMGE (register) page C7-2067 line 120534 MATCH x0e203c00/mask=xbf20fc00 +# CONSTRUCT x4ee03c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmge/2@8 +# AUNIT --inst x4ee03c00/mask=xffe0fc00 --status nopcodeop -:cmge Rd_VPR128.2D, Rn_VPR128.2D, "#0" -is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=3 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR128.2D & Rd_VPR128.2D & Zd +:cmge Rd_VPR128.2D, Rn_VPR128.2D, Rm_VPR128.2D +is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=3 & b_2121=1 & Rm_VPR128.2D & b_1115=0x7 & b_1010=1 & Rn_VPR128.2D & Rd_VPR128.2D & Zd { - Rd_VPR128.2D = NEON_cmge(Rn_VPR128.2D, 0:8, 8:1); -} - -# C7.2.30 CMGE (zero) page C7-2070 line 120683 MATCH x2e208800/mask=xbf3ffc00 -# CONSTRUCT x2ea08800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_cmge/2@4 -# AUNIT --inst x2ea08800/mask=xfffffc00 --status nopcodeop - -:cmge Rd_VPR64.2S, Rn_VPR64.2S, "#0" -is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR64.2S & Rd_VPR64.2S & Zd -{ - Rd_VPR64.2S = NEON_cmge(Rn_VPR64.2S, 0:4, 4:1); -} - -# C7.2.30 CMGE (zero) page C7-2070 line 120683 MATCH x2e208800/mask=xbf3ffc00 -# CONSTRUCT x2e608800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:2 =NEON_cmge/2@2 -# AUNIT --inst x2e608800/mask=xfffffc00 --status nopcodeop - -:cmge Rd_VPR64.4H, Rn_VPR64.4H, "#0" -is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR64.4H & Rd_VPR64.4H & Zd -{ - Rd_VPR64.4H = NEON_cmge(Rn_VPR64.4H, 0:2, 2:1); -} - -# C7.2.30 CMGE (zero) page C7-2070 line 120683 MATCH x2e208800/mask=xbf3ffc00 -# CONSTRUCT x6ea08800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_cmge/2@4 -# AUNIT --inst x6ea08800/mask=xfffffc00 --status nopcodeop - -:cmge Rd_VPR128.4S, Rn_VPR128.4S, "#0" -is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR128.4S & Rd_VPR128.4S & Zd -{ - Rd_VPR128.4S = NEON_cmge(Rn_VPR128.4S, 0:4, 4:1); -} - -# C7.2.30 CMGE (zero) page C7-2070 line 120683 MATCH x2e208800/mask=xbf3ffc00 -# CONSTRUCT x2e208800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:1 =NEON_cmge/2@1 -# AUNIT --inst x2e208800/mask=xfffffc00 --status nopcodeop - -:cmge Rd_VPR64.8B, Rn_VPR64.8B, "#0" -is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR64.8B & Rd_VPR64.8B & Zd -{ - Rd_VPR64.8B = NEON_cmge(Rn_VPR64.8B, 0:1, 1:1); -} - -# C7.2.30 CMGE (zero) page C7-2070 line 120683 MATCH x2e208800/mask=xbf3ffc00 -# CONSTRUCT x6e608800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:2 =NEON_cmge/2@2 -# AUNIT --inst x6e608800/mask=xfffffc00 --status nopcodeop - -:cmge Rd_VPR128.8H, Rn_VPR128.8H, "#0" -is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR128.8H & Rd_VPR128.8H & Zd -{ - Rd_VPR128.8H = NEON_cmge(Rn_VPR128.8H, 0:2, 2:1); + local eqVal:8 = ~ 0; + Rd_VPR128.2D[0,64] = zext(Rn_VPR128.2D[0,64] s>= Rm_VPR128.2D[0,64]) * eqVal; + Rd_VPR128.2D[64,64] = zext(Rn_VPR128.2D[64,64] s>= Rm_VPR128.2D[64,64]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.30 CMGE (zero) page C7-2070 line 120683 MATCH x7e208800/mask=xff3ffc00 @@ -1661,84 +1838,146 @@ is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x10 & b_1216=0x :cmge Rd_FPR64, Rn_FPR64, "#0" is b_2431=0b01111110 & b_2223=0b11 & b_1021=0b100000100010 & Rd_FPR64 & Rn_FPR64 & Zd { - Rd_FPR64 = NEON_cmge(Rn_FPR64, 0:4); + local tmp1:1 = Rn_FPR64 s>= 0; + local tmp2:8 = zext(tmp1); + local tmp3:8 = ~ 0:8; + Rd_FPR64 = tmp2 * tmp3; + zext_zd(Zd); # zero upper 24 bytes of Zd } -# C7.2.31 CMGT (register) page C7-2073 line 120841 MATCH x0e203400/mask=xbf20fc00 -# CONSTRUCT x4e203400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmgt/2@1 -# AUNIT --inst x4e203400/mask=xffe0fc00 --status nopcodeop +# C7.2.30 CMGE (zero) page C7-2070 line 120683 MATCH x2e208800/mask=xbf3ffc00 +# CONSTRUCT x2e208800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:1 =NEON_cmge/2@1 +# AUNIT --inst x2e208800/mask=xfffffc00 --status nopcodeop -:cmgt Rd_VPR128.16B, Rn_VPR128.16B, Rm_VPR128.16B -is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_2121=1 & Rm_VPR128.16B & b_1115=0x6 & b_1010=1 & Rn_VPR128.16B & Rd_VPR128.16B & Zd +:cmge Rd_VPR64.8B, Rn_VPR64.8B, "#0" +is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR64.8B & Rd_VPR64.8B & Zd { - Rd_VPR128.16B = NEON_cmgt(Rn_VPR128.16B, Rm_VPR128.16B, 1:1); + local eqVal:1 = ~ 0; + local zero:1 = 0; + Rd_VPR64.8B[0,8] = (Rn_VPR64.8B[0,8] s>= zero) * eqVal; + Rd_VPR64.8B[8,8] = (Rn_VPR64.8B[8,8] s>= zero) * eqVal; + Rd_VPR64.8B[16,8] = (Rn_VPR64.8B[16,8] s>= zero) * eqVal; + Rd_VPR64.8B[24,8] = (Rn_VPR64.8B[24,8] s>= zero) * eqVal; + Rd_VPR64.8B[32,8] = (Rn_VPR64.8B[32,8] s>= zero) * eqVal; + Rd_VPR64.8B[40,8] = (Rn_VPR64.8B[40,8] s>= zero) * eqVal; + Rd_VPR64.8B[48,8] = (Rn_VPR64.8B[48,8] s>= zero) * eqVal; + Rd_VPR64.8B[56,8] = (Rn_VPR64.8B[56,8] s>= zero) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } -# C7.2.31 CMGT (register) page C7-2073 line 120841 MATCH x0e203400/mask=xbf20fc00 -# CONSTRUCT x4ee03400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmgt/2@8 -# AUNIT --inst x4ee03400/mask=xffe0fc00 --status nopcodeop +# C7.2.30 CMGE (zero) page C7-2070 line 120683 MATCH x2e208800/mask=xbf3ffc00 +# CONSTRUCT x6e208800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:1 =NEON_cmge/2@1 +# AUNIT --inst x6e208800/mask=xfffffc00 --status nopcodeop -:cmgt Rd_VPR128.2D, Rn_VPR128.2D, Rm_VPR128.2D -is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=3 & b_2121=1 & Rm_VPR128.2D & b_1115=0x6 & b_1010=1 & Rn_VPR128.2D & Rd_VPR128.2D & Zd +:cmge Rd_VPR128.16B, Rn_VPR128.16B, "#0" +is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR128.16B & Rd_VPR128.16B & Zd { - Rd_VPR128.2D = NEON_cmgt(Rn_VPR128.2D, Rm_VPR128.2D, 8:1); + local eqVal:1 = ~ 0; + local zero:1 = 0; + Rd_VPR128.16B[0,8] = (Rn_VPR128.16B[0,8] s>= zero) * eqVal; + Rd_VPR128.16B[8,8] = (Rn_VPR128.16B[8,8] s>= zero) * eqVal; + Rd_VPR128.16B[16,8] = (Rn_VPR128.16B[16,8] s>= zero) * eqVal; + Rd_VPR128.16B[24,8] = (Rn_VPR128.16B[24,8] s>= zero) * eqVal; + Rd_VPR128.16B[32,8] = (Rn_VPR128.16B[32,8] s>= zero) * eqVal; + Rd_VPR128.16B[40,8] = (Rn_VPR128.16B[40,8] s>= zero) * eqVal; + Rd_VPR128.16B[48,8] = (Rn_VPR128.16B[48,8] s>= zero) * eqVal; + Rd_VPR128.16B[56,8] = (Rn_VPR128.16B[56,8] s>= zero) * eqVal; + Rd_VPR128.16B[64,8] = (Rn_VPR128.16B[64,8] s>= zero) * eqVal; + Rd_VPR128.16B[72,8] = (Rn_VPR128.16B[72,8] s>= zero) * eqVal; + Rd_VPR128.16B[80,8] = (Rn_VPR128.16B[80,8] s>= zero) * eqVal; + Rd_VPR128.16B[88,8] = (Rn_VPR128.16B[88,8] s>= zero) * eqVal; + Rd_VPR128.16B[96,8] = (Rn_VPR128.16B[96,8] s>= zero) * eqVal; + Rd_VPR128.16B[104,8] = (Rn_VPR128.16B[104,8] s>= zero) * eqVal; + Rd_VPR128.16B[112,8] = (Rn_VPR128.16B[112,8] s>= zero) * eqVal; + Rd_VPR128.16B[120,8] = (Rn_VPR128.16B[120,8] s>= zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } -# C7.2.31 CMGT (register) page C7-2073 line 120841 MATCH x0e203400/mask=xbf20fc00 -# CONSTRUCT x0ea03400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmgt/2@4 -# AUNIT --inst x0ea03400/mask=xffe0fc00 --status nopcodeop +# C7.2.30 CMGE (zero) page C7-2070 line 120683 MATCH x2e208800/mask=xbf3ffc00 +# CONSTRUCT x2e608800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:2 =NEON_cmge/2@2 +# AUNIT --inst x2e608800/mask=xfffffc00 --status nopcodeop -:cmgt Rd_VPR64.2S, Rn_VPR64.2S, Rm_VPR64.2S -is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR64.2S & b_1115=0x6 & b_1010=1 & Rn_VPR64.2S & Rd_VPR64.2S & Zd +:cmge Rd_VPR64.4H, Rn_VPR64.4H, "#0" +is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR64.4H & Rd_VPR64.4H & Zd { - Rd_VPR64.2S = NEON_cmgt(Rn_VPR64.2S, Rm_VPR64.2S, 4:1); + local eqVal:2 = ~ 0; + local zero:2 = 0; + Rd_VPR64.4H[0,16] = zext(Rn_VPR64.4H[0,16] s>= zero) * eqVal; + Rd_VPR64.4H[16,16] = zext(Rn_VPR64.4H[16,16] s>= zero) * eqVal; + Rd_VPR64.4H[32,16] = zext(Rn_VPR64.4H[32,16] s>= zero) * eqVal; + Rd_VPR64.4H[48,16] = zext(Rn_VPR64.4H[48,16] s>= zero) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } -# C7.2.31 CMGT (register) page C7-2073 line 120841 MATCH x0e203400/mask=xbf20fc00 -# CONSTRUCT x0e603400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmgt/2@2 -# AUNIT --inst x0e603400/mask=xffe0fc00 --status nopcodeop +# C7.2.30 CMGE (zero) page C7-2070 line 120683 MATCH x2e208800/mask=xbf3ffc00 +# CONSTRUCT x6e608800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:2 =NEON_cmge/2@2 +# AUNIT --inst x6e608800/mask=xfffffc00 --status nopcodeop -:cmgt Rd_VPR64.4H, Rn_VPR64.4H, Rm_VPR64.4H -is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR64.4H & b_1115=0x6 & b_1010=1 & Rn_VPR64.4H & Rd_VPR64.4H & Zd +:cmge Rd_VPR128.8H, Rn_VPR128.8H, "#0" +is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR128.8H & Rd_VPR128.8H & Zd { - Rd_VPR64.4H = NEON_cmgt(Rn_VPR64.4H, Rm_VPR64.4H, 2:1); + local eqVal:2 = ~ 0; + local zero:2 = 0; + Rd_VPR128.8H[0,16] = zext(Rn_VPR128.8H[0,16] s>= zero) * eqVal; + Rd_VPR128.8H[16,16] = zext(Rn_VPR128.8H[16,16] s>= zero) * eqVal; + Rd_VPR128.8H[32,16] = zext(Rn_VPR128.8H[32,16] s>= zero) * eqVal; + Rd_VPR128.8H[48,16] = zext(Rn_VPR128.8H[48,16] s>= zero) * eqVal; + Rd_VPR128.8H[64,16] = zext(Rn_VPR128.8H[64,16] s>= zero) * eqVal; + Rd_VPR128.8H[80,16] = zext(Rn_VPR128.8H[80,16] s>= zero) * eqVal; + Rd_VPR128.8H[96,16] = zext(Rn_VPR128.8H[96,16] s>= zero) * eqVal; + Rd_VPR128.8H[112,16] = zext(Rn_VPR128.8H[112,16] s>= zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } -# C7.2.31 CMGT (register) page C7-2073 line 120841 MATCH x0e203400/mask=xbf20fc00 -# CONSTRUCT x4ea03400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmgt/2@4 -# AUNIT --inst x4ea03400/mask=xffe0fc00 --status nopcodeop +# C7.2.30 CMGE (zero) page C7-2070 line 120683 MATCH x2e208800/mask=xbf3ffc00 +# CONSTRUCT x2ea08800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_cmge/2@4 +# AUNIT --inst x2ea08800/mask=xfffffc00 --status nopcodeop -:cmgt Rd_VPR128.4S, Rn_VPR128.4S, Rm_VPR128.4S -is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR128.4S & b_1115=0x6 & b_1010=1 & Rn_VPR128.4S & Rd_VPR128.4S & Zd +:cmge Rd_VPR64.2S, Rn_VPR64.2S, "#0" +is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR64.2S & Rd_VPR64.2S & Zd { - Rd_VPR128.4S = NEON_cmgt(Rn_VPR128.4S, Rm_VPR128.4S, 4:1); + local eqVal:4 = ~ 0; + local zero:4 = 0; + Rd_VPR64.2S[0,32] = zext(Rn_VPR64.2S[0,32] s>= zero) * eqVal; + Rd_VPR64.2S[32,32] = zext(Rn_VPR64.2S[32,32] s>= zero) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } -# C7.2.31 CMGT (register) page C7-2073 line 120841 MATCH x0e203400/mask=xbf20fc00 -# CONSTRUCT x0e203400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmgt/2@1 -# AUNIT --inst x0e203400/mask=xffe0fc00 --status nopcodeop +# C7.2.30 CMGE (zero) page C7-2070 line 120683 MATCH x2e208800/mask=xbf3ffc00 +# CONSTRUCT x6ea08800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_cmge/2@4 +# AUNIT --inst x6ea08800/mask=xfffffc00 --status nopcodeop -:cmgt Rd_VPR64.8B, Rn_VPR64.8B, Rm_VPR64.8B -is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_2121=1 & Rm_VPR64.8B & b_1115=0x6 & b_1010=1 & Rn_VPR64.8B & Rd_VPR64.8B & Zd +:cmge Rd_VPR128.4S, Rn_VPR128.4S, "#0" +is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR128.4S & Rd_VPR128.4S & Zd { - Rd_VPR64.8B = NEON_cmgt(Rn_VPR64.8B, Rm_VPR64.8B, 1:1); + local eqVal:4 = ~ 0; + local zero:4 = 0; + Rd_VPR128.4S[0,32] = zext(Rn_VPR128.4S[0,32] s>= zero) * eqVal; + Rd_VPR128.4S[32,32] = zext(Rn_VPR128.4S[32,32] s>= zero) * eqVal; + Rd_VPR128.4S[64,32] = zext(Rn_VPR128.4S[64,32] s>= zero) * eqVal; + Rd_VPR128.4S[96,32] = zext(Rn_VPR128.4S[96,32] s>= zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } -# C7.2.31 CMGT (register) page C7-2073 line 120841 MATCH x0e203400/mask=xbf20fc00 -# CONSTRUCT x4e603400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmgt/2@2 -# AUNIT --inst x4e603400/mask=xffe0fc00 --status nopcodeop +# C7.2.30 CMGE (zero) page C7-2070 line 120683 MATCH x2e208800/mask=xbf3ffc00 +# CONSTRUCT x6ee08800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:8 =NEON_cmge/2@8 +# AUNIT --inst x6ee08800/mask=xfffffc00 --status nopcodeop -:cmgt Rd_VPR128.8H, Rn_VPR128.8H, Rm_VPR128.8H -is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR128.8H & b_1115=0x6 & b_1010=1 & Rn_VPR128.8H & Rd_VPR128.8H & Zd +:cmge Rd_VPR128.2D, Rn_VPR128.2D, "#0" +is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=3 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR128.2D & Rd_VPR128.2D & Zd { - Rd_VPR128.8H = NEON_cmgt(Rn_VPR128.8H, Rm_VPR128.8H, 2:1); + local eqVal:8 = ~ 0; + local zero:8 = 0; + Rd_VPR128.2D[0,64] = zext(Rn_VPR128.2D[0,64] s>= zero) * eqVal; + Rd_VPR128.2D[64,64] = zext(Rn_VPR128.2D[64,64] s>= zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.31 CMGT (register) page C7-2073 line 120841 MATCH x5e203400/mask=xff20fc00 @@ -1749,84 +1988,140 @@ is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR128.8H :cmgt Rd_FPR64, Rn_FPR64, Rm_FPR64 is b_2431=0b01011110 & b_2223=0b11 & b_21=1 & b_1015=0b001101 & Rd_FPR64 & Rn_FPR64 & Rm_FPR64 & Zd { - Rd_FPR64 = NEON_cmgt(Rn_FPR64, Rm_FPR64); + local tmp1:1 = Rn_FPR64 s> Rm_FPR64; + local tmp2:8 = zext(tmp1); + local tmp3:8 = ~ 0:8; + Rd_FPR64 = tmp2 * tmp3; + zext_zd(Zd); # zero upper 24 bytes of Zd } -# C7.2.32 CMGT (zero) page C7-2076 line 120990 MATCH x0e208800/mask=xbf3ffc00 -# CONSTRUCT x4e208800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:1 =NEON_cmgt/2@1 -# AUNIT --inst x4e208800/mask=xfffffc00 --status nopcodeop +# C7.2.31 CMGT (register) page C7-2073 line 120841 MATCH x0e203400/mask=xbf20fc00 +# CONSTRUCT x0e203400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmgt/2@1 +# AUNIT --inst x0e203400/mask=xffe0fc00 --status nopcodeop -:cmgt Rd_VPR128.16B, Rn_VPR128.16B, "#0" -is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR128.16B & Rd_VPR128.16B & Zd +:cmgt Rd_VPR64.8B, Rn_VPR64.8B, Rm_VPR64.8B +is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_2121=1 & Rm_VPR64.8B & b_1115=0x6 & b_1010=1 & Rn_VPR64.8B & Rd_VPR64.8B & Zd { - Rd_VPR128.16B = NEON_cmgt(Rn_VPR128.16B, 0:1, 1:1); + local eqVal:1 = ~ 0; + Rd_VPR64.8B[0,8] = (Rn_VPR64.8B[0,8] s> Rm_VPR64.8B[0,8]) * eqVal; + Rd_VPR64.8B[8,8] = (Rn_VPR64.8B[8,8] s> Rm_VPR64.8B[8,8]) * eqVal; + Rd_VPR64.8B[16,8] = (Rn_VPR64.8B[16,8] s> Rm_VPR64.8B[16,8]) * eqVal; + Rd_VPR64.8B[24,8] = (Rn_VPR64.8B[24,8] s> Rm_VPR64.8B[24,8]) * eqVal; + Rd_VPR64.8B[32,8] = (Rn_VPR64.8B[32,8] s> Rm_VPR64.8B[32,8]) * eqVal; + Rd_VPR64.8B[40,8] = (Rn_VPR64.8B[40,8] s> Rm_VPR64.8B[40,8]) * eqVal; + Rd_VPR64.8B[48,8] = (Rn_VPR64.8B[48,8] s> Rm_VPR64.8B[48,8]) * eqVal; + Rd_VPR64.8B[56,8] = (Rn_VPR64.8B[56,8] s> Rm_VPR64.8B[56,8]) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } -# C7.2.32 CMGT (zero) page C7-2076 line 120990 MATCH x0e208800/mask=xbf3ffc00 -# CONSTRUCT x4ee08800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:8 =NEON_cmgt/2@8 -# AUNIT --inst x4ee08800/mask=xfffffc00 --status nopcodeop +# C7.2.31 CMGT (register) page C7-2073 line 120841 MATCH x0e203400/mask=xbf20fc00 +# CONSTRUCT x4e203400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmgt/2@1 +# AUNIT --inst x4e203400/mask=xffe0fc00 --status nopcodeop -:cmgt Rd_VPR128.2D, Rn_VPR128.2D, "#0" -is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=3 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR128.2D & Rd_VPR128.2D & Zd +:cmgt Rd_VPR128.16B, Rn_VPR128.16B, Rm_VPR128.16B +is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_2121=1 & Rm_VPR128.16B & b_1115=0x6 & b_1010=1 & Rn_VPR128.16B & Rd_VPR128.16B & Zd { - Rd_VPR128.2D = NEON_cmgt(Rn_VPR128.2D, 0:8, 8:1); + local eqVal:1 = ~ 0; + Rd_VPR128.16B[0,8] = (Rn_VPR128.16B[0,8] s> Rm_VPR128.16B[0,8]) * eqVal; + Rd_VPR128.16B[8,8] = (Rn_VPR128.16B[8,8] s> Rm_VPR128.16B[8,8]) * eqVal; + Rd_VPR128.16B[16,8] = (Rn_VPR128.16B[16,8] s> Rm_VPR128.16B[16,8]) * eqVal; + Rd_VPR128.16B[24,8] = (Rn_VPR128.16B[24,8] s> Rm_VPR128.16B[24,8]) * eqVal; + Rd_VPR128.16B[32,8] = (Rn_VPR128.16B[32,8] s> Rm_VPR128.16B[32,8]) * eqVal; + Rd_VPR128.16B[40,8] = (Rn_VPR128.16B[40,8] s> Rm_VPR128.16B[40,8]) * eqVal; + Rd_VPR128.16B[48,8] = (Rn_VPR128.16B[48,8] s> Rm_VPR128.16B[48,8]) * eqVal; + Rd_VPR128.16B[56,8] = (Rn_VPR128.16B[56,8] s> Rm_VPR128.16B[56,8]) * eqVal; + Rd_VPR128.16B[64,8] = (Rn_VPR128.16B[64,8] s> Rm_VPR128.16B[64,8]) * eqVal; + Rd_VPR128.16B[72,8] = (Rn_VPR128.16B[72,8] s> Rm_VPR128.16B[72,8]) * eqVal; + Rd_VPR128.16B[80,8] = (Rn_VPR128.16B[80,8] s> Rm_VPR128.16B[80,8]) * eqVal; + Rd_VPR128.16B[88,8] = (Rn_VPR128.16B[88,8] s> Rm_VPR128.16B[88,8]) * eqVal; + Rd_VPR128.16B[96,8] = (Rn_VPR128.16B[96,8] s> Rm_VPR128.16B[96,8]) * eqVal; + Rd_VPR128.16B[104,8] = (Rn_VPR128.16B[104,8] s> Rm_VPR128.16B[104,8]) * eqVal; + Rd_VPR128.16B[112,8] = (Rn_VPR128.16B[112,8] s> Rm_VPR128.16B[112,8]) * eqVal; + Rd_VPR128.16B[120,8] = (Rn_VPR128.16B[120,8] s> Rm_VPR128.16B[120,8]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } -# C7.2.32 CMGT (zero) page C7-2076 line 120990 MATCH x0e208800/mask=xbf3ffc00 -# CONSTRUCT x0ea08800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_cmgt/2@4 -# AUNIT --inst x0ea08800/mask=xfffffc00 --status nopcodeop -:cmgt Rd_VPR64.2S, Rn_VPR64.2S, "#0" -is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR64.2S & Rd_VPR64.2S & Zd +# C7.2.31 CMGT (register) page C7-2073 line 120841 MATCH x0e203400/mask=xbf20fc00 +# CONSTRUCT x0e603400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmgt/2@2 +# AUNIT --inst x0e603400/mask=xffe0fc00 --status nopcodeop + +:cmgt Rd_VPR64.4H, Rn_VPR64.4H, Rm_VPR64.4H +is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR64.4H & b_1115=0x6 & b_1010=1 & Rn_VPR64.4H & Rd_VPR64.4H & Zd { - Rd_VPR64.2S = NEON_cmgt(Rn_VPR64.2S, 0:4, 4:1); + local eqVal:2 = ~ 0; + Rd_VPR64.4H[0,16] = zext(Rn_VPR64.4H[0,16] s> Rm_VPR64.4H[0,16]) * eqVal; + Rd_VPR64.4H[16,16] = zext(Rn_VPR64.4H[16,16] s> Rm_VPR64.4H[16,16]) * eqVal; + Rd_VPR64.4H[32,16] = zext(Rn_VPR64.4H[32,16] s> Rm_VPR64.4H[32,16]) * eqVal; + Rd_VPR64.4H[48,16] = zext(Rn_VPR64.4H[48,16] s> Rm_VPR64.4H[48,16]) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } -# C7.2.32 CMGT (zero) page C7-2076 line 120990 MATCH x0e208800/mask=xbf3ffc00 -# CONSTRUCT x0e608800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:2 =NEON_cmgt/2@2 -# AUNIT --inst x0e608800/mask=xfffffc00 --status nopcodeop +# C7.2.31 CMGT (register) page C7-2073 line 120841 MATCH x0e203400/mask=xbf20fc00 +# CONSTRUCT x4e603400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmgt/2@2 +# AUNIT --inst x4e603400/mask=xffe0fc00 --status nopcodeop -:cmgt Rd_VPR64.4H, Rn_VPR64.4H, "#0" -is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR64.4H & Rd_VPR64.4H & Zd +:cmgt Rd_VPR128.8H, Rn_VPR128.8H, Rm_VPR128.8H +is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR128.8H & b_1115=0x6 & b_1010=1 & Rn_VPR128.8H & Rd_VPR128.8H & Zd { - Rd_VPR64.4H = NEON_cmgt(Rn_VPR64.4H, 0:2, 2:1); + local eqVal:2 = ~ 0; + Rd_VPR128.8H[0,16] = zext(Rn_VPR128.8H[0,16] s> Rm_VPR128.8H[0,16]) * eqVal; + Rd_VPR128.8H[16,16] = zext(Rn_VPR128.8H[16,16] s> Rm_VPR128.8H[16,16]) * eqVal; + Rd_VPR128.8H[32,16] = zext(Rn_VPR128.8H[32,16] s> Rm_VPR128.8H[32,16]) * eqVal; + Rd_VPR128.8H[48,16] = zext(Rn_VPR128.8H[48,16] s> Rm_VPR128.8H[48,16]) * eqVal; + Rd_VPR128.8H[64,16] = zext(Rn_VPR128.8H[64,16] s> Rm_VPR128.8H[64,16]) * eqVal; + Rd_VPR128.8H[80,16] = zext(Rn_VPR128.8H[80,16] s> Rm_VPR128.8H[80,16]) * eqVal; + Rd_VPR128.8H[96,16] = zext(Rn_VPR128.8H[96,16] s> Rm_VPR128.8H[96,16]) * eqVal; + Rd_VPR128.8H[112,16] = zext(Rn_VPR128.8H[112,16] s> Rm_VPR128.8H[112,16]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } -# C7.2.32 CMGT (zero) page C7-2076 line 120990 MATCH x0e208800/mask=xbf3ffc00 -# CONSTRUCT x4ea08800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_cmgt/2@4 -# AUNIT --inst x4ea08800/mask=xfffffc00 --status nopcodeop +# C7.2.31 CMGT (register) page C7-2073 line 120841 MATCH x0e203400/mask=xbf20fc00 +# CONSTRUCT x0ea03400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmgt/2@4 +# AUNIT --inst x0ea03400/mask=xffe0fc00 --status nopcodeop -:cmgt Rd_VPR128.4S, Rn_VPR128.4S, "#0" -is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR128.4S & Rd_VPR128.4S & Zd +:cmgt Rd_VPR64.2S, Rn_VPR64.2S, Rm_VPR64.2S +is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR64.2S & b_1115=0x6 & b_1010=1 & Rn_VPR64.2S & Rd_VPR64.2S & Zd { - Rd_VPR128.4S = NEON_cmgt(Rn_VPR128.4S, 0:4, 4:1); + local eqVal:4 = ~ 0; + Rd_VPR64.2S[0,32] = zext(Rn_VPR64.2S[0,32] s> Rm_VPR64.2S[0,32]) * eqVal; + Rd_VPR64.2S[32,32] = zext(Rn_VPR64.2S[32,32] s> Rm_VPR64.2S[32,32]) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } -# C7.2.32 CMGT (zero) page C7-2076 line 120990 MATCH x0e208800/mask=xbf3ffc00 -# CONSTRUCT x0e208800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:1 =NEON_cmgt/2@1 -# AUNIT --inst x0e208800/mask=xfffffc00 --status nopcodeop +# C7.2.31 CMGT (register) page C7-2073 line 120841 MATCH x0e203400/mask=xbf20fc00 +# CONSTRUCT x4ea03400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmgt/2@4 +# AUNIT --inst x4ea03400/mask=xffe0fc00 --status nopcodeop -:cmgt Rd_VPR64.8B, Rn_VPR64.8B, "#0" -is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR64.8B & Rd_VPR64.8B & Zd +:cmgt Rd_VPR128.4S, Rn_VPR128.4S, Rm_VPR128.4S +is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR128.4S & b_1115=0x6 & b_1010=1 & Rn_VPR128.4S & Rd_VPR128.4S & Zd { - Rd_VPR64.8B = NEON_cmgt(Rn_VPR64.8B, 0:1, 1:1); + local eqVal:4 = ~ 0; + Rd_VPR128.4S[0,32] = zext(Rn_VPR128.4S[0,32] s> Rm_VPR128.4S[0,32]) * eqVal; + Rd_VPR128.4S[32,32] = zext(Rn_VPR128.4S[32,32] s> Rm_VPR128.4S[32,32]) * eqVal; + Rd_VPR128.4S[64,32] = zext(Rn_VPR128.4S[64,32] s> Rm_VPR128.4S[64,32]) * eqVal; + Rd_VPR128.4S[96,32] = zext(Rn_VPR128.4S[96,32] s> Rm_VPR128.4S[96,32]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } -# C7.2.32 CMGT (zero) page C7-2076 line 120990 MATCH x0e208800/mask=xbf3ffc00 -# CONSTRUCT x4e608800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:2 =NEON_cmgt/2@2 -# AUNIT --inst x4e608800/mask=xfffffc00 --status nopcodeop +# C7.2.31 CMGT (register) page C7-2073 line 120841 MATCH x0e203400/mask=xbf20fc00 +# CONSTRUCT x4ee03400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmgt/2@8 +# AUNIT --inst x4ee03400/mask=xffe0fc00 --status nopcodeop -:cmgt Rd_VPR128.8H, Rn_VPR128.8H, "#0" -is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR128.8H & Rd_VPR128.8H & Zd +:cmgt Rd_VPR128.2D, Rn_VPR128.2D, Rm_VPR128.2D +is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=3 & b_2121=1 & Rm_VPR128.2D & b_1115=0x6 & b_1010=1 & Rn_VPR128.2D & Rd_VPR128.2D & Zd { - Rd_VPR128.8H = NEON_cmgt(Rn_VPR128.8H, 0:2, 2:1); + local eqVal:8 = ~ 0; + Rd_VPR128.2D[0,64] = zext(Rn_VPR128.2D[0,64] s> Rm_VPR128.2D[0,64]) * eqVal; + Rd_VPR128.2D[64,64] = zext(Rn_VPR128.2D[64,64] s> Rm_VPR128.2D[64,64]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.32 CMGT (zero) page C7-2076 line 120990 MATCH x5e208800/mask=xff3ffc00 @@ -1837,84 +2132,146 @@ is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x10 & b_1216=0x :cmgt Rd_FPR64, Rn_FPR64, "#0" is b_2431=0b01011110 & b_2223=0b11 & b_1021=0b100000100010 & Rd_FPR64 & Rn_FPR64 & Zd { - Rd_FPR64 = NEON_cmgt(Rn_FPR64, 0:8); + local tmp1:1 = Rn_FPR64 s> 0; + local tmp2:8 = zext(tmp1); + local tmp3:8 = ~ 0:8; + Rd_FPR64 = tmp2 * tmp3; + zext_zd(Zd); # zero upper 24 bytes of Zd } -# C7.2.33 CMHI (register) page C7-2079 line 121148 MATCH x2e203400/mask=xbf20fc00 -# CONSTRUCT x6e203400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhi/2@1 -# AUNIT --inst x6e203400/mask=xffe0fc00 --status nopcodeop +# C7.2.32 CMGT (zero) page C7-2076 line 120990 MATCH x0e208800/mask=xbf3ffc00 +# CONSTRUCT x0e208800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:1 =NEON_cmgt/2@1 +# AUNIT --inst x0e208800/mask=xfffffc00 --status nopcodeop -:cmhi Rd_VPR128.16B, Rn_VPR128.16B, Rm_VPR128.16B -is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_2121=1 & Rm_VPR128.16B & b_1115=0x6 & b_1010=1 & Rn_VPR128.16B & Rd_VPR128.16B & Zd +:cmgt Rd_VPR64.8B, Rn_VPR64.8B, "#0" +is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR64.8B & Rd_VPR64.8B & Zd { - Rd_VPR128.16B = NEON_cmhi(Rn_VPR128.16B, Rm_VPR128.16B, 1:1); + local eqVal:1 = ~ 0; + local zero:1 = 0; + Rd_VPR64.8B[0,8] = (Rn_VPR64.8B[0,8] s> zero) * eqVal; + Rd_VPR64.8B[8,8] = (Rn_VPR64.8B[8,8] s> zero) * eqVal; + Rd_VPR64.8B[16,8] = (Rn_VPR64.8B[16,8] s> zero) * eqVal; + Rd_VPR64.8B[24,8] = (Rn_VPR64.8B[24,8] s> zero) * eqVal; + Rd_VPR64.8B[32,8] = (Rn_VPR64.8B[32,8] s> zero) * eqVal; + Rd_VPR64.8B[40,8] = (Rn_VPR64.8B[40,8] s> zero) * eqVal; + Rd_VPR64.8B[48,8] = (Rn_VPR64.8B[48,8] s> zero) * eqVal; + Rd_VPR64.8B[56,8] = (Rn_VPR64.8B[56,8] s> zero) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } -# C7.2.33 CMHI (register) page C7-2079 line 121148 MATCH x2e203400/mask=xbf20fc00 -# CONSTRUCT x6ee03400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhi/2@8 -# AUNIT --inst x6ee03400/mask=xffe0fc00 --status nopcodeop +# C7.2.32 CMGT (zero) page C7-2076 line 120990 MATCH x0e208800/mask=xbf3ffc00 +# CONSTRUCT x4e208800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:1 =NEON_cmgt/2@1 +# AUNIT --inst x4e208800/mask=xfffffc00 --status nopcodeop -:cmhi Rd_VPR128.2D, Rn_VPR128.2D, Rm_VPR128.2D -is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=3 & b_2121=1 & Rm_VPR128.2D & b_1115=0x6 & b_1010=1 & Rn_VPR128.2D & Rd_VPR128.2D & Zd +:cmgt Rd_VPR128.16B, Rn_VPR128.16B, "#0" +is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR128.16B & Rd_VPR128.16B & Zd { - Rd_VPR128.2D = NEON_cmhi(Rn_VPR128.2D, Rm_VPR128.2D, 8:1); + local eqVal:1 = ~ 0; + local zero:1 = 0; + Rd_VPR128.16B[0,8] = (Rn_VPR128.16B[0,8] s> zero) * eqVal; + Rd_VPR128.16B[8,8] = (Rn_VPR128.16B[8,8] s> zero) * eqVal; + Rd_VPR128.16B[16,8] = (Rn_VPR128.16B[16,8] s> zero) * eqVal; + Rd_VPR128.16B[24,8] = (Rn_VPR128.16B[24,8] s> zero) * eqVal; + Rd_VPR128.16B[32,8] = (Rn_VPR128.16B[32,8] s> zero) * eqVal; + Rd_VPR128.16B[40,8] = (Rn_VPR128.16B[40,8] s> zero) * eqVal; + Rd_VPR128.16B[48,8] = (Rn_VPR128.16B[48,8] s> zero) * eqVal; + Rd_VPR128.16B[56,8] = (Rn_VPR128.16B[56,8] s> zero) * eqVal; + Rd_VPR128.16B[64,8] = (Rn_VPR128.16B[64,8] s> zero) * eqVal; + Rd_VPR128.16B[72,8] = (Rn_VPR128.16B[72,8] s> zero) * eqVal; + Rd_VPR128.16B[80,8] = (Rn_VPR128.16B[80,8] s> zero) * eqVal; + Rd_VPR128.16B[88,8] = (Rn_VPR128.16B[88,8] s> zero) * eqVal; + Rd_VPR128.16B[96,8] = (Rn_VPR128.16B[96,8] s> zero) * eqVal; + Rd_VPR128.16B[104,8] = (Rn_VPR128.16B[104,8] s> zero) * eqVal; + Rd_VPR128.16B[112,8] = (Rn_VPR128.16B[112,8] s> zero) * eqVal; + Rd_VPR128.16B[120,8] = (Rn_VPR128.16B[120,8] s> zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } -# C7.2.33 CMHI (register) page C7-2079 line 121148 MATCH x2e203400/mask=xbf20fc00 -# CONSTRUCT x2ea03400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhi/2@4 -# AUNIT --inst x2ea03400/mask=xffe0fc00 --status nopcodeop +# C7.2.32 CMGT (zero) page C7-2076 line 120990 MATCH x0e208800/mask=xbf3ffc00 +# CONSTRUCT x0e608800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:2 =NEON_cmgt/2@2 +# AUNIT --inst x0e608800/mask=xfffffc00 --status nopcodeop -:cmhi Rd_VPR64.2S, Rn_VPR64.2S, Rm_VPR64.2S -is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR64.2S & b_1115=0x6 & b_1010=1 & Rn_VPR64.2S & Rd_VPR64.2S & Zd +:cmgt Rd_VPR64.4H, Rn_VPR64.4H, "#0" +is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR64.4H & Rd_VPR64.4H & Zd { - Rd_VPR64.2S = NEON_cmhi(Rn_VPR64.2S, Rm_VPR64.2S, 4:1); + local eqVal:2 = ~ 0; + local zero:2 = 0; + Rd_VPR64.4H[0,16] = zext(Rn_VPR64.4H[0,16] s> zero) * eqVal; + Rd_VPR64.4H[16,16] = zext(Rn_VPR64.4H[16,16] s> zero) * eqVal; + Rd_VPR64.4H[32,16] = zext(Rn_VPR64.4H[32,16] s> zero) * eqVal; + Rd_VPR64.4H[48,16] = zext(Rn_VPR64.4H[48,16] s> zero) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } -# C7.2.33 CMHI (register) page C7-2079 line 121148 MATCH x2e203400/mask=xbf20fc00 -# CONSTRUCT x2e603400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhi/2@2 -# AUNIT --inst x2e603400/mask=xffe0fc00 --status nopcodeop +# C7.2.32 CMGT (zero) page C7-2076 line 120990 MATCH x0e208800/mask=xbf3ffc00 +# CONSTRUCT x4e608800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:2 =NEON_cmgt/2@2 +# AUNIT --inst x4e608800/mask=xfffffc00 --status nopcodeop -:cmhi Rd_VPR64.4H, Rn_VPR64.4H, Rm_VPR64.4H -is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR64.4H & b_1115=0x6 & b_1010=1 & Rn_VPR64.4H & Rd_VPR64.4H & Zd +:cmgt Rd_VPR128.8H, Rn_VPR128.8H, "#0" +is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR128.8H & Rd_VPR128.8H & Zd { - Rd_VPR64.4H = NEON_cmhi(Rn_VPR64.4H, Rm_VPR64.4H, 2:1); + local eqVal:2 = ~ 0; + local zero:2 = 0; + Rd_VPR128.8H[0,16] = zext(Rn_VPR128.8H[0,16] s> zero) * eqVal; + Rd_VPR128.8H[16,16] = zext(Rn_VPR128.8H[16,16] s> zero) * eqVal; + Rd_VPR128.8H[32,16] = zext(Rn_VPR128.8H[32,16] s> zero) * eqVal; + Rd_VPR128.8H[48,16] = zext(Rn_VPR128.8H[48,16] s> zero) * eqVal; + Rd_VPR128.8H[64,16] = zext(Rn_VPR128.8H[64,16] s> zero) * eqVal; + Rd_VPR128.8H[80,16] = zext(Rn_VPR128.8H[80,16] s> zero) * eqVal; + Rd_VPR128.8H[96,16] = zext(Rn_VPR128.8H[96,16] s> zero) * eqVal; + Rd_VPR128.8H[112,16] = zext(Rn_VPR128.8H[112,16] s> zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } -# C7.2.33 CMHI (register) page C7-2079 line 121148 MATCH x2e203400/mask=xbf20fc00 -# CONSTRUCT x6ea03400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhi/2@4 -# AUNIT --inst x6ea03400/mask=xffe0fc00 --status nopcodeop +# C7.2.32 CMGT (zero) page C7-2076 line 120990 MATCH x0e208800/mask=xbf3ffc00 +# CONSTRUCT x0ea08800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_cmgt/2@4 +# AUNIT --inst x0ea08800/mask=xfffffc00 --status nopcodeop -:cmhi Rd_VPR128.4S, Rn_VPR128.4S, Rm_VPR128.4S -is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR128.4S & b_1115=0x6 & b_1010=1 & Rn_VPR128.4S & Rd_VPR128.4S & Zd +:cmgt Rd_VPR64.2S, Rn_VPR64.2S, "#0" +is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR64.2S & Rd_VPR64.2S & Zd { - Rd_VPR128.4S = NEON_cmhi(Rn_VPR128.4S, Rm_VPR128.4S, 4:1); + local eqVal:4 = ~ 0; + local zero:4 = 0; + Rd_VPR64.2S[0,32] = zext(Rn_VPR64.2S[0,32] s> zero) * eqVal; + Rd_VPR64.2S[32,32] = zext(Rn_VPR64.2S[32,32] s> zero) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } -# C7.2.33 CMHI (register) page C7-2079 line 121148 MATCH x2e203400/mask=xbf20fc00 -# CONSTRUCT x2e203400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhi/2@1 -# AUNIT --inst x2e203400/mask=xffe0fc00 --status nopcodeop +# C7.2.32 CMGT (zero) page C7-2076 line 120990 MATCH x0e208800/mask=xbf3ffc00 +# CONSTRUCT x4ea08800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_cmgt/2@4 +# AUNIT --inst x4ea08800/mask=xfffffc00 --status nopcodeop -:cmhi Rd_VPR64.8B, Rn_VPR64.8B, Rm_VPR64.8B -is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_2121=1 & Rm_VPR64.8B & b_1115=0x6 & b_1010=1 & Rn_VPR64.8B & Rd_VPR64.8B & Zd +:cmgt Rd_VPR128.4S, Rn_VPR128.4S, "#0" +is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR128.4S & Rd_VPR128.4S & Zd { - Rd_VPR64.8B = NEON_cmhi(Rn_VPR64.8B, Rm_VPR64.8B, 1:1); + local eqVal:4 = ~ 0; + local zero:4 = 0; + Rd_VPR128.4S[0,32] = zext(Rn_VPR128.4S[0,32] s> zero) * eqVal; + Rd_VPR128.4S[32,32] = zext(Rn_VPR128.4S[32,32] s> zero) * eqVal; + Rd_VPR128.4S[64,32] = zext(Rn_VPR128.4S[64,32] s> zero) * eqVal; + Rd_VPR128.4S[96,32] = zext(Rn_VPR128.4S[96,32] s> zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } -# C7.2.33 CMHI (register) page C7-2079 line 121148 MATCH x2e203400/mask=xbf20fc00 -# CONSTRUCT x6e603400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhi/2@2 -# AUNIT --inst x6e603400/mask=xffe0fc00 --status nopcodeop +# C7.2.32 CMGT (zero) page C7-2076 line 120990 MATCH x0e208800/mask=xbf3ffc00 +# CONSTRUCT x4ee08800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:8 =NEON_cmgt/2@8 +# AUNIT --inst x4ee08800/mask=xfffffc00 --status nopcodeop -:cmhi Rd_VPR128.8H, Rn_VPR128.8H, Rm_VPR128.8H -is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR128.8H & b_1115=0x6 & b_1010=1 & Rn_VPR128.8H & Rd_VPR128.8H & Zd +:cmgt Rd_VPR128.2D, Rn_VPR128.2D, "#0" +is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=3 & b_1721=0x10 & b_1216=0x8 & b_1011=2 & Rn_VPR128.2D & Rd_VPR128.2D & Zd { - Rd_VPR128.8H = NEON_cmhi(Rn_VPR128.8H, Rm_VPR128.8H, 2:1); + local eqVal:8 = ~ 0; + local zero:8 = 0; + Rd_VPR128.2D[0,64] = zext(Rn_VPR128.2D[0,64] s> zero) * eqVal; + Rd_VPR128.2D[64,64] = zext(Rn_VPR128.2D[64,64] s> zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.33 CMHI (register) page C7-2079 line 121148 MATCH x7e203400/mask=xff20fc00 @@ -1925,62 +2282,156 @@ is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR128.8H :cmhi Rd_FPR64, Rn_FPR64, Rm_FPR64 is b_2431=0b01111110 & b_2223=0b11 & b_21=1 & b_1015=0b001101 & Rd_FPR64 & Rn_FPR64 & Rm_FPR64 & Zd { - Rd_FPR64 = NEON_cmhi(Rn_FPR64, Rm_FPR64); + local tmp1:1 = Rn_FPR64 > Rm_FPR64; + local tmp2:8 = zext(tmp1); + local tmp3:8 = ~ 0:8; + Rd_FPR64 = tmp2 * tmp3; + zext_zd(Zd); # zero upper 24 bytes of Zd } -# C7.2.34 CMHS (register) page C7-2082 line 121297 MATCH x2e203c00/mask=xbf20fc00 -# CONSTRUCT x6e203c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhs/2@1 -# AUNIT --inst x6e203c00/mask=xffe0fc00 --status nopcodeop +# C7.2.33 CMHI (register) page C7-2079 line 121148 MATCH x2e203400/mask=xbf20fc00 +# CONSTRUCT x2e203400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhi/2@1 +# AUNIT --inst x2e203400/mask=xffe0fc00 --status nopcodeop -:cmhs Rd_VPR128.16B, Rn_VPR128.16B, Rm_VPR128.16B -is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_2121=1 & Rm_VPR128.16B & b_1115=0x7 & b_1010=1 & Rn_VPR128.16B & Rd_VPR128.16B & Zd +:cmhi Rd_VPR64.8B, Rn_VPR64.8B, Rm_VPR64.8B +is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_2121=1 & Rm_VPR64.8B & b_1115=0x6 & b_1010=1 & Rn_VPR64.8B & Rd_VPR64.8B & Zd { - Rd_VPR128.16B = NEON_cmhs(Rn_VPR128.16B, Rm_VPR128.16B, 1:1); + local eqVal:1 = ~ 0; + Rd_VPR64.8B[0,8] = (Rn_VPR64.8B[0,8] > Rm_VPR64.8B[0,8]) * eqVal; + Rd_VPR64.8B[8,8] = (Rn_VPR64.8B[8,8] > Rm_VPR64.8B[8,8]) * eqVal; + Rd_VPR64.8B[16,8] = (Rn_VPR64.8B[16,8] > Rm_VPR64.8B[16,8]) * eqVal; + Rd_VPR64.8B[24,8] = (Rn_VPR64.8B[24,8] > Rm_VPR64.8B[24,8]) * eqVal; + Rd_VPR64.8B[32,8] = (Rn_VPR64.8B[32,8] > Rm_VPR64.8B[32,8]) * eqVal; + Rd_VPR64.8B[40,8] = (Rn_VPR64.8B[40,8] > Rm_VPR64.8B[40,8]) * eqVal; + Rd_VPR64.8B[48,8] = (Rn_VPR64.8B[48,8] > Rm_VPR64.8B[48,8]) * eqVal; + Rd_VPR64.8B[56,8] = (Rn_VPR64.8B[56,8] > Rm_VPR64.8B[56,8]) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } -# C7.2.34 CMHS (register) page C7-2082 line 121297 MATCH x2e203c00/mask=xbf20fc00 -# CONSTRUCT x6ee03c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhs/2@8 -# AUNIT --inst x6ee03c00/mask=xffe0fc00 --status nopcodeop +# C7.2.33 CMHI (register) page C7-2079 line 121148 MATCH x2e203400/mask=xbf20fc00 +# CONSTRUCT x6e203400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhi/2@1 +# AUNIT --inst x6e203400/mask=xffe0fc00 --status nopcodeop -:cmhs Rd_VPR128.2D, Rn_VPR128.2D, Rm_VPR128.2D -is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=3 & b_2121=1 & Rm_VPR128.2D & b_1115=0x7 & b_1010=1 & Rn_VPR128.2D & Rd_VPR128.2D & Zd +:cmhi Rd_VPR128.16B, Rn_VPR128.16B, Rm_VPR128.16B +is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_2121=1 & Rm_VPR128.16B & b_1115=0x6 & b_1010=1 & Rn_VPR128.16B & Rd_VPR128.16B & Zd { - Rd_VPR128.2D = NEON_cmhs(Rn_VPR128.2D, Rm_VPR128.2D, 8:1); + local eqVal:1 = ~ 0; + Rd_VPR128.16B[0,8] = (Rn_VPR128.16B[0,8] > Rm_VPR128.16B[0,8]) * eqVal; + Rd_VPR128.16B[8,8] = (Rn_VPR128.16B[8,8] > Rm_VPR128.16B[8,8]) * eqVal; + Rd_VPR128.16B[16,8] = (Rn_VPR128.16B[16,8] > Rm_VPR128.16B[16,8]) * eqVal; + Rd_VPR128.16B[24,8] = (Rn_VPR128.16B[24,8] > Rm_VPR128.16B[24,8]) * eqVal; + Rd_VPR128.16B[32,8] = (Rn_VPR128.16B[32,8] > Rm_VPR128.16B[32,8]) * eqVal; + Rd_VPR128.16B[40,8] = (Rn_VPR128.16B[40,8] > Rm_VPR128.16B[40,8]) * eqVal; + Rd_VPR128.16B[48,8] = (Rn_VPR128.16B[48,8] > Rm_VPR128.16B[48,8]) * eqVal; + Rd_VPR128.16B[56,8] = (Rn_VPR128.16B[56,8] > Rm_VPR128.16B[56,8]) * eqVal; + Rd_VPR128.16B[64,8] = (Rn_VPR128.16B[64,8] > Rm_VPR128.16B[64,8]) * eqVal; + Rd_VPR128.16B[72,8] = (Rn_VPR128.16B[72,8] > Rm_VPR128.16B[72,8]) * eqVal; + Rd_VPR128.16B[80,8] = (Rn_VPR128.16B[80,8] > Rm_VPR128.16B[80,8]) * eqVal; + Rd_VPR128.16B[88,8] = (Rn_VPR128.16B[88,8] > Rm_VPR128.16B[88,8]) * eqVal; + Rd_VPR128.16B[96,8] = (Rn_VPR128.16B[96,8] > Rm_VPR128.16B[96,8]) * eqVal; + Rd_VPR128.16B[104,8] = (Rn_VPR128.16B[104,8] > Rm_VPR128.16B[104,8]) * eqVal; + Rd_VPR128.16B[112,8] = (Rn_VPR128.16B[112,8] > Rm_VPR128.16B[112,8]) * eqVal; + Rd_VPR128.16B[120,8] = (Rn_VPR128.16B[120,8] > Rm_VPR128.16B[120,8]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } -# C7.2.34 CMHS (register) page C7-2082 line 121297 MATCH x2e203c00/mask=xbf20fc00 -# CONSTRUCT x2ea03c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhs/2@4 -# AUNIT --inst x2ea03c00/mask=xffe0fc00 --status nopcodeop +# C7.2.33 CMHI (register) page C7-2079 line 121148 MATCH x2e203400/mask=xbf20fc00 +# CONSTRUCT x2e603400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhi/2@2 +# AUNIT --inst x2e603400/mask=xffe0fc00 --status nopcodeop -:cmhs Rd_VPR64.2S, Rn_VPR64.2S, Rm_VPR64.2S -is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR64.2S & b_1115=0x7 & b_1010=1 & Rn_VPR64.2S & Rd_VPR64.2S & Zd +:cmhi Rd_VPR64.4H, Rn_VPR64.4H, Rm_VPR64.4H +is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR64.4H & b_1115=0x6 & b_1010=1 & Rn_VPR64.4H & Rd_VPR64.4H & Zd { - Rd_VPR64.2S = NEON_cmhs(Rn_VPR64.2S, Rm_VPR64.2S, 4:1); + local eqVal:2 = ~ 0; + Rd_VPR64.4H[0,16] = zext(Rn_VPR64.4H[0,16] > Rm_VPR64.4H[0,16]) * eqVal; + Rd_VPR64.4H[16,16] = zext(Rn_VPR64.4H[16,16] > Rm_VPR64.4H[16,16]) * eqVal; + Rd_VPR64.4H[32,16] = zext(Rn_VPR64.4H[32,16] > Rm_VPR64.4H[32,16]) * eqVal; + Rd_VPR64.4H[48,16] = zext(Rn_VPR64.4H[48,16] > Rm_VPR64.4H[48,16]) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } -# C7.2.34 CMHS (register) page C7-2082 line 121297 MATCH x2e203c00/mask=xbf20fc00 -# CONSTRUCT x2e603c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhs/2@2 -# AUNIT --inst x2e603c00/mask=xffe0fc00 --status nopcodeop -:cmhs Rd_VPR64.4H, Rn_VPR64.4H, Rm_VPR64.4H -is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR64.4H & b_1115=0x7 & b_1010=1 & Rn_VPR64.4H & Rd_VPR64.4H & Zd +# C7.2.33 CMHI (register) page C7-2079 line 121148 MATCH x2e203400/mask=xbf20fc00 +# CONSTRUCT x6e603400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhi/2@2 +# AUNIT --inst x6e603400/mask=xffe0fc00 --status nopcodeop + +:cmhi Rd_VPR128.8H, Rn_VPR128.8H, Rm_VPR128.8H +is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR128.8H & b_1115=0x6 & b_1010=1 & Rn_VPR128.8H & Rd_VPR128.8H & Zd { - Rd_VPR64.4H = NEON_cmhs(Rn_VPR64.4H, Rm_VPR64.4H, 2:1); + local eqVal:2 = ~ 0; + Rd_VPR128.8H[0,16] = zext(Rn_VPR128.8H[0,16] > Rm_VPR128.8H[0,16]) * eqVal; + Rd_VPR128.8H[16,16] = zext(Rn_VPR128.8H[16,16] > Rm_VPR128.8H[16,16]) * eqVal; + Rd_VPR128.8H[32,16] = zext(Rn_VPR128.8H[32,16] > Rm_VPR128.8H[32,16]) * eqVal; + Rd_VPR128.8H[48,16] = zext(Rn_VPR128.8H[48,16] > Rm_VPR128.8H[48,16]) * eqVal; + Rd_VPR128.8H[64,16] = zext(Rn_VPR128.8H[64,16] > Rm_VPR128.8H[64,16]) * eqVal; + Rd_VPR128.8H[80,16] = zext(Rn_VPR128.8H[80,16] > Rm_VPR128.8H[80,16]) * eqVal; + Rd_VPR128.8H[96,16] = zext(Rn_VPR128.8H[96,16] > Rm_VPR128.8H[96,16]) * eqVal; + Rd_VPR128.8H[112,16] = zext(Rn_VPR128.8H[112,16] > Rm_VPR128.8H[112,16]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } -# C7.2.34 CMHS (register) page C7-2082 line 121297 MATCH x2e203c00/mask=xbf20fc00 -# CONSTRUCT x6ea03c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhs/2@4 -# AUNIT --inst x6ea03c00/mask=xffe0fc00 --status nopcodeop +# C7.2.33 CMHI (register) page C7-2079 line 121148 MATCH x2e203400/mask=xbf20fc00 +# CONSTRUCT x2ea03400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhi/2@4 +# AUNIT --inst x2ea03400/mask=xffe0fc00 --status nopcodeop -:cmhs Rd_VPR128.4S, Rn_VPR128.4S, Rm_VPR128.4S -is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR128.4S & b_1115=0x7 & b_1010=1 & Rn_VPR128.4S & Rd_VPR128.4S & Zd +:cmhi Rd_VPR64.2S, Rn_VPR64.2S, Rm_VPR64.2S +is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR64.2S & b_1115=0x6 & b_1010=1 & Rn_VPR64.2S & Rd_VPR64.2S & Zd { - Rd_VPR128.4S = NEON_cmhs(Rn_VPR128.4S, Rm_VPR128.4S, 4:1); + local eqVal:4 = ~ 0; + Rd_VPR64.2S[0,32] = zext(Rn_VPR64.2S[0,32] > Rm_VPR64.2S[0,32]) * eqVal; + Rd_VPR64.2S[32,32] = zext(Rn_VPR64.2S[32,32] > Rm_VPR64.2S[32,32]) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd +} + +# C7.2.33 CMHI (register) page C7-2079 line 121148 MATCH x2e203400/mask=xbf20fc00 +# CONSTRUCT x6ea03400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhi/2@4 +# AUNIT --inst x6ea03400/mask=xffe0fc00 --status nopcodeop + +:cmhi Rd_VPR128.4S, Rn_VPR128.4S, Rm_VPR128.4S +is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR128.4S & b_1115=0x6 & b_1010=1 & Rn_VPR128.4S & Rd_VPR128.4S & Zd +{ + local eqVal:4 = ~ 0; + Rd_VPR128.4S[0,32] = zext(Rn_VPR128.4S[0,32] > Rm_VPR128.4S[0,32]) * eqVal; + Rd_VPR128.4S[32,32] = zext(Rn_VPR128.4S[32,32] > Rm_VPR128.4S[32,32]) * eqVal; + Rd_VPR128.4S[64,32] = zext(Rn_VPR128.4S[64,32] > Rm_VPR128.4S[64,32]) * eqVal; + Rd_VPR128.4S[96,32] = zext(Rn_VPR128.4S[96,32] > Rm_VPR128.4S[96,32]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd +} + +# C7.2.33 CMHI (register) page C7-2079 line 121148 MATCH x2e203400/mask=xbf20fc00 +# CONSTRUCT x6ee03400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhi/2@8 +# AUNIT --inst x6ee03400/mask=xffe0fc00 --status nopcodeop + +:cmhi Rd_VPR128.2D, Rn_VPR128.2D, Rm_VPR128.2D +is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=3 & b_2121=1 & Rm_VPR128.2D & b_1115=0x6 & b_1010=1 & Rn_VPR128.2D & Rd_VPR128.2D & Zd +{ + local eqVal:8 = ~ 0; + Rd_VPR128.2D[0,64] = zext(Rn_VPR128.2D[0,64] > Rm_VPR128.2D[0,64]) * eqVal; + Rd_VPR128.2D[64,64] = zext(Rn_VPR128.2D[64,64] > Rm_VPR128.2D[64,64]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd +} + + +# C7.2.34 CMHS (register) page C7-2082 line 121297 MATCH x7e203c00/mask=xff20fc00 +# CONSTRUCT x7ee03c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhs/2 +# AUNIT --inst x7ee03c00/mask=xffe0fc00 --status nopcodeop + +:cmhs Rd_FPR64, Rn_FPR64, Rm_FPR64 +is b_2431=0b01111110 & b_2223=0b11 & b_21=1 & b_1015=0b001111 & Rd_FPR64 & Rn_FPR64 & Rm_FPR64 & Zd +{ + local tmp1:1 = Rn_FPR64 >= Rm_FPR64; + local tmp2:8 = zext(tmp1); + local tmp3:8 = ~ 0:8; + Rd_FPR64 = tmp2 * tmp3; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.34 CMHS (register) page C7-2082 line 121297 MATCH x2e203c00/mask=xbf20fc00 @@ -1991,9 +2442,63 @@ is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR128.4S :cmhs Rd_VPR64.8B, Rn_VPR64.8B, Rm_VPR64.8B is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_2121=1 & Rm_VPR64.8B & b_1115=0x7 & b_1010=1 & Rn_VPR64.8B & Rd_VPR64.8B & Zd { - Rd_VPR64.8B = NEON_cmhs(Rn_VPR64.8B, Rm_VPR64.8B, 1:1); + local eqVal:1 = ~ 0; + Rd_VPR64.8B[0,8] = (Rn_VPR64.8B[0,8] >= Rm_VPR64.8B[0,8]) * eqVal; + Rd_VPR64.8B[8,8] = (Rn_VPR64.8B[8,8] >= Rm_VPR64.8B[8,8]) * eqVal; + Rd_VPR64.8B[16,8] = (Rn_VPR64.8B[16,8] >= Rm_VPR64.8B[16,8]) * eqVal; + Rd_VPR64.8B[24,8] = (Rn_VPR64.8B[24,8] >= Rm_VPR64.8B[24,8]) * eqVal; + Rd_VPR64.8B[32,8] = (Rn_VPR64.8B[32,8] >= Rm_VPR64.8B[32,8]) * eqVal; + Rd_VPR64.8B[40,8] = (Rn_VPR64.8B[40,8] >= Rm_VPR64.8B[40,8]) * eqVal; + Rd_VPR64.8B[48,8] = (Rn_VPR64.8B[48,8] >= Rm_VPR64.8B[48,8]) * eqVal; + Rd_VPR64.8B[56,8] = (Rn_VPR64.8B[56,8] >= Rm_VPR64.8B[56,8]) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } +# C7.2.34 CMHS (register) page C7-2082 line 121297 MATCH x2e203c00/mask=xbf20fc00 +# CONSTRUCT x6e203c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhs/2@1 +# AUNIT --inst x6e203c00/mask=xffe0fc00 --status nopcodeop + +:cmhs Rd_VPR128.16B, Rn_VPR128.16B, Rm_VPR128.16B +is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_2121=1 & Rm_VPR128.16B & b_1115=0x7 & b_1010=1 & Rn_VPR128.16B & Rd_VPR128.16B & Zd +{ + local eqVal:1 = ~ 0; + Rd_VPR128.16B[0,8] = (Rn_VPR128.16B[0,8] >= Rm_VPR128.16B[0,8]) * eqVal; + Rd_VPR128.16B[8,8] = (Rn_VPR128.16B[8,8] >= Rm_VPR128.16B[8,8]) * eqVal; + Rd_VPR128.16B[16,8] = (Rn_VPR128.16B[16,8] >= Rm_VPR128.16B[16,8]) * eqVal; + Rd_VPR128.16B[24,8] = (Rn_VPR128.16B[24,8] >= Rm_VPR128.16B[24,8]) * eqVal; + Rd_VPR128.16B[32,8] = (Rn_VPR128.16B[32,8] >= Rm_VPR128.16B[32,8]) * eqVal; + Rd_VPR128.16B[40,8] = (Rn_VPR128.16B[40,8] >= Rm_VPR128.16B[40,8]) * eqVal; + Rd_VPR128.16B[48,8] = (Rn_VPR128.16B[48,8] >= Rm_VPR128.16B[48,8]) * eqVal; + Rd_VPR128.16B[56,8] = (Rn_VPR128.16B[56,8] >= Rm_VPR128.16B[56,8]) * eqVal; + Rd_VPR128.16B[64,8] = (Rn_VPR128.16B[64,8] >= Rm_VPR128.16B[64,8]) * eqVal; + Rd_VPR128.16B[72,8] = (Rn_VPR128.16B[72,8] >= Rm_VPR128.16B[72,8]) * eqVal; + Rd_VPR128.16B[80,8] = (Rn_VPR128.16B[80,8] >= Rm_VPR128.16B[80,8]) * eqVal; + Rd_VPR128.16B[88,8] = (Rn_VPR128.16B[88,8] >= Rm_VPR128.16B[88,8]) * eqVal; + Rd_VPR128.16B[96,8] = (Rn_VPR128.16B[96,8] >= Rm_VPR128.16B[96,8]) * eqVal; + Rd_VPR128.16B[104,8] = (Rn_VPR128.16B[104,8] >= Rm_VPR128.16B[104,8]) * eqVal; + Rd_VPR128.16B[112,8] = (Rn_VPR128.16B[112,8] >= Rm_VPR128.16B[112,8]) * eqVal; + Rd_VPR128.16B[120,8] = (Rn_VPR128.16B[120,8] >= Rm_VPR128.16B[120,8]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd +} + +# C7.2.34 CMHS (register) page C7-2082 line 121297 MATCH x2e203c00/mask=xbf20fc00 +# CONSTRUCT x2e603c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhs/2@2 +# AUNIT --inst x2e603c00/mask=xffe0fc00 --status nopcodeop + +:cmhs Rd_VPR64.4H, Rn_VPR64.4H, Rm_VPR64.4H +is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR64.4H & b_1115=0x7 & b_1010=1 & Rn_VPR64.4H & Rd_VPR64.4H & Zd +{ + local eqVal:2 = ~ 0; + Rd_VPR64.4H[0,16] = zext(Rn_VPR64.4H[0,16] >= Rm_VPR64.4H[0,16]) * eqVal; + Rd_VPR64.4H[16,16] = zext(Rn_VPR64.4H[16,16] >= Rm_VPR64.4H[16,16]) * eqVal; + Rd_VPR64.4H[32,16] = zext(Rn_VPR64.4H[32,16] >= Rm_VPR64.4H[32,16]) * eqVal; + Rd_VPR64.4H[48,16] = zext(Rn_VPR64.4H[48,16] >= Rm_VPR64.4H[48,16]) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd +} + + # C7.2.34 CMHS (register) page C7-2082 line 121297 MATCH x2e203c00/mask=xbf20fc00 # CONSTRUCT x6e603c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES # SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhs/2@2 @@ -2002,73 +2507,76 @@ is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_2121=1 & Rm_VPR64.8B :cmhs Rd_VPR128.8H, Rn_VPR128.8H, Rm_VPR128.8H is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR128.8H & b_1115=0x7 & b_1010=1 & Rn_VPR128.8H & Rd_VPR128.8H & Zd { - Rd_VPR128.8H = NEON_cmhs(Rn_VPR128.8H, Rm_VPR128.8H, 2:1); + local eqVal:2 = ~ 0; + Rd_VPR128.8H[0,16] = zext(Rn_VPR128.8H[0,16] >= Rm_VPR128.8H[0,16]) * eqVal; + Rd_VPR128.8H[16,16] = zext(Rn_VPR128.8H[16,16] >= Rm_VPR128.8H[16,16]) * eqVal; + Rd_VPR128.8H[32,16] = zext(Rn_VPR128.8H[32,16] >= Rm_VPR128.8H[32,16]) * eqVal; + Rd_VPR128.8H[48,16] = zext(Rn_VPR128.8H[48,16] >= Rm_VPR128.8H[48,16]) * eqVal; + Rd_VPR128.8H[64,16] = zext(Rn_VPR128.8H[64,16] >= Rm_VPR128.8H[64,16]) * eqVal; + Rd_VPR128.8H[80,16] = zext(Rn_VPR128.8H[80,16] >= Rm_VPR128.8H[80,16]) * eqVal; + Rd_VPR128.8H[96,16] = zext(Rn_VPR128.8H[96,16] >= Rm_VPR128.8H[96,16]) * eqVal; + Rd_VPR128.8H[112,16] = zext(Rn_VPR128.8H[112,16] >= Rm_VPR128.8H[112,16]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } -# C7.2.34 CMHS (register) page C7-2082 line 121297 MATCH x7e203c00/mask=xff20fc00 -# CONSTRUCT x7ee03c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhs/2 -# AUNIT --inst x7ee03c00/mask=xffe0fc00 --status nopcodeop +# C7.2.34 CMHS (register) page C7-2082 line 121297 MATCH x2e203c00/mask=xbf20fc00 +# CONSTRUCT x2ea03c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhs/2@4 +# AUNIT --inst x2ea03c00/mask=xffe0fc00 --status nopcodeop -:cmhs Rd_FPR64, Rn_FPR64, Rm_FPR64 -is b_2431=0b01111110 & b_2223=0b11 & b_21=1 & b_1015=0b001111 & Rd_FPR64 & Rn_FPR64 & Rm_FPR64 & Zd +:cmhs Rd_VPR64.2S, Rn_VPR64.2S, Rm_VPR64.2S +is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR64.2S & b_1115=0x7 & b_1010=1 & Rn_VPR64.2S & Rd_VPR64.2S & Zd { - Rd_FPR64 = NEON_cmhs(Rn_FPR64, Rm_FPR64); + local eqVal:4 = ~ 0; + Rd_VPR64.2S[0,32] = zext(Rn_VPR64.2S[0,32] >= Rm_VPR64.2S[0,32]) * eqVal; + Rd_VPR64.2S[32,32] = zext(Rn_VPR64.2S[32,32] >= Rm_VPR64.2S[32,32]) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } -# C7.2.35 CMLE (zero) page C7-2085 line 121446 MATCH x2e209800/mask=xbf3ffc00 -# CONSTRUCT x6e209800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:1 =NEON_cmle/2@1 -# AUNIT --inst x6e209800/mask=xfffffc00 --status nopcodeop +# C7.2.34 CMHS (register) page C7-2082 line 121297 MATCH x2e203c00/mask=xbf20fc00 +# CONSTRUCT x6ea03c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhs/2@4 +# AUNIT --inst x6ea03c00/mask=xffe0fc00 --status nopcodeop -:cmle Rd_VPR128.16B, Rn_VPR128.16B, "#0" -is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR128.16B & Rd_VPR128.16B & Zd +:cmhs Rd_VPR128.4S, Rn_VPR128.4S, Rm_VPR128.4S +is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR128.4S & b_1115=0x7 & b_1010=1 & Rn_VPR128.4S & Rd_VPR128.4S & Zd { - Rd_VPR128.16B = NEON_cmle(Rn_VPR128.16B, 0:1, 1:1); + local eqVal:4 = ~ 0; + Rd_VPR128.4S[0,32] = zext(Rn_VPR128.4S[0,32] >= Rm_VPR128.4S[0,32]) * eqVal; + Rd_VPR128.4S[32,32] = zext(Rn_VPR128.4S[32,32] >= Rm_VPR128.4S[32,32]) * eqVal; + Rd_VPR128.4S[64,32] = zext(Rn_VPR128.4S[64,32] >= Rm_VPR128.4S[64,32]) * eqVal; + Rd_VPR128.4S[96,32] = zext(Rn_VPR128.4S[96,32] >= Rm_VPR128.4S[96,32]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } -# C7.2.35 CMLE (zero) page C7-2085 line 121446 MATCH x2e209800/mask=xbf3ffc00 -# CONSTRUCT x6ee09800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:8 =NEON_cmle/2@8 -# AUNIT --inst x6ee09800/mask=xfffffc00 --status nopcodeop +# C7.2.34 CMHS (register) page C7-2082 line 121297 MATCH x2e203c00/mask=xbf20fc00 +# CONSTRUCT x6ee03c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmhs/2@8 +# AUNIT --inst x6ee03c00/mask=xffe0fc00 --status nopcodeop -:cmle Rd_VPR128.2D, Rn_VPR128.2D, "#0" -is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=3 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR128.2D & Rd_VPR128.2D & Zd +:cmhs Rd_VPR128.2D, Rn_VPR128.2D, Rm_VPR128.2D +is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=3 & b_2121=1 & Rm_VPR128.2D & b_1115=0x7 & b_1010=1 & Rn_VPR128.2D & Rd_VPR128.2D & Zd { - Rd_VPR128.2D = NEON_cmle(Rn_VPR128.2D, 0:8, 8:1); + local eqVal:8 = ~ 0; + Rd_VPR128.2D[0,64] = zext(Rn_VPR128.2D[0,64] >= Rm_VPR128.2D[0,64]) * eqVal; + Rd_VPR128.2D[64,64] = zext(Rn_VPR128.2D[64,64] >= Rm_VPR128.2D[64,64]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } -# C7.2.35 CMLE (zero) page C7-2085 line 121446 MATCH x2e209800/mask=xbf3ffc00 -# CONSTRUCT x2ea09800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_cmle/2@4 -# AUNIT --inst x2ea09800/mask=xfffffc00 --status nopcodeop -:cmle Rd_VPR64.2S, Rn_VPR64.2S, "#0" -is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR64.2S & Rd_VPR64.2S & Zd +# C7.2.35 CMLE (zero) page C7-2085 line 121446 MATCH x7e209800/mask=xff3ffc00 +# CONSTRUCT x7ee09800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:8 =NEON_cmle/2 +# AUNIT --inst x7ee09800/mask=xfffffc00 --status nopcodeop + +:cmle Rd_FPR64, Rn_FPR64, "#0" +is b_2431=0b01111110 & b_2223=0b11 & b_1021=0b100000100110 & Rd_FPR64 & Rn_FPR64 & Zd { - Rd_VPR64.2S = NEON_cmle(Rn_VPR64.2S, 0:4, 4:1); -} - -# C7.2.35 CMLE (zero) page C7-2085 line 121446 MATCH x2e209800/mask=xbf3ffc00 -# CONSTRUCT x2e609800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:2 =NEON_cmle/2@2 -# AUNIT --inst x2e609800/mask=xfffffc00 --status nopcodeop - -:cmle Rd_VPR64.4H, Rn_VPR64.4H, "#0" -is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR64.4H & Rd_VPR64.4H & Zd -{ - Rd_VPR64.4H = NEON_cmle(Rn_VPR64.4H, 0:2, 2:1); -} - -# C7.2.35 CMLE (zero) page C7-2085 line 121446 MATCH x2e209800/mask=xbf3ffc00 -# CONSTRUCT x6ea09800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_cmle/2@4 -# AUNIT --inst x6ea09800/mask=xfffffc00 --status nopcodeop - -:cmle Rd_VPR128.4S, Rn_VPR128.4S, "#0" -is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR128.4S & Rd_VPR128.4S & Zd -{ - Rd_VPR128.4S = NEON_cmle(Rn_VPR128.4S, 0:4, 4:1); + local tmp1:1 = Rn_FPR64 s<= 0; + local tmp2:8 = zext(tmp1); + local tmp3:8 = ~ 0:8; + Rd_FPR64 = tmp2 * tmp3; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.35 CMLE (zero) page C7-2085 line 121446 MATCH x2e209800/mask=xbf3ffc00 @@ -2079,7 +2587,63 @@ is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0x :cmle Rd_VPR64.8B, Rn_VPR64.8B, "#0" is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR64.8B & Rd_VPR64.8B & Zd { - Rd_VPR64.8B = NEON_cmle(Rn_VPR64.8B, 0:1, 1:1); + local eqVal:1 = ~ 0; + local zero:1 = 0; + Rd_VPR64.8B[0,8] = (Rn_VPR64.8B[0,8] s<= zero) * eqVal; + Rd_VPR64.8B[8,8] = (Rn_VPR64.8B[8,8] s<= zero) * eqVal; + Rd_VPR64.8B[16,8] = (Rn_VPR64.8B[16,8] s<= zero) * eqVal; + Rd_VPR64.8B[24,8] = (Rn_VPR64.8B[24,8] s<= zero) * eqVal; + Rd_VPR64.8B[32,8] = (Rn_VPR64.8B[32,8] s<= zero) * eqVal; + Rd_VPR64.8B[40,8] = (Rn_VPR64.8B[40,8] s<= zero) * eqVal; + Rd_VPR64.8B[48,8] = (Rn_VPR64.8B[48,8] s<= zero) * eqVal; + Rd_VPR64.8B[56,8] = (Rn_VPR64.8B[56,8] s<= zero) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd +} + +# C7.2.35 CMLE (zero) page C7-2085 line 121446 MATCH x2e209800/mask=xbf3ffc00 +# CONSTRUCT x6e209800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:1 =NEON_cmle/2@1 +# AUNIT --inst x6e209800/mask=xfffffc00 --status nopcodeop + +:cmle Rd_VPR128.16B, Rn_VPR128.16B, "#0" +is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR128.16B & Rd_VPR128.16B & Zd +{ + local eqVal:1 = ~ 0; + local zero:1 = 0; + Rd_VPR128.16B[0,8] = (Rn_VPR128.16B[0,8] s<= zero) * eqVal; + Rd_VPR128.16B[8,8] = (Rn_VPR128.16B[8,8] s<= zero) * eqVal; + Rd_VPR128.16B[16,8] = (Rn_VPR128.16B[16,8] s<= zero) * eqVal; + Rd_VPR128.16B[24,8] = (Rn_VPR128.16B[24,8] s<= zero) * eqVal; + Rd_VPR128.16B[32,8] = (Rn_VPR128.16B[32,8] s<= zero) * eqVal; + Rd_VPR128.16B[40,8] = (Rn_VPR128.16B[40,8] s<= zero) * eqVal; + Rd_VPR128.16B[48,8] = (Rn_VPR128.16B[48,8] s<= zero) * eqVal; + Rd_VPR128.16B[56,8] = (Rn_VPR128.16B[56,8] s<= zero) * eqVal; + Rd_VPR128.16B[64,8] = (Rn_VPR128.16B[64,8] s<= zero) * eqVal; + Rd_VPR128.16B[72,8] = (Rn_VPR128.16B[72,8] s<= zero) * eqVal; + Rd_VPR128.16B[80,8] = (Rn_VPR128.16B[80,8] s<= zero) * eqVal; + Rd_VPR128.16B[88,8] = (Rn_VPR128.16B[88,8] s<= zero) * eqVal; + Rd_VPR128.16B[96,8] = (Rn_VPR128.16B[96,8] s<= zero) * eqVal; + Rd_VPR128.16B[104,8] = (Rn_VPR128.16B[104,8] s<= zero) * eqVal; + Rd_VPR128.16B[112,8] = (Rn_VPR128.16B[112,8] s<= zero) * eqVal; + Rd_VPR128.16B[120,8] = (Rn_VPR128.16B[120,8] s<= zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd +} + +# C7.2.35 CMLE (zero) page C7-2085 line 121446 MATCH x2e209800/mask=xbf3ffc00 +# CONSTRUCT x2e609800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:2 =NEON_cmle/2@2 +# AUNIT --inst x2e609800/mask=xfffffc00 --status nopcodeop + +:cmle Rd_VPR64.4H, Rn_VPR64.4H, "#0" +is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR64.4H & Rd_VPR64.4H & Zd +{ + local eqVal:2 = ~ 0; + local zero:2 = 0; + Rd_VPR64.4H[0,16] = zext(Rn_VPR64.4H[0,16] s<= zero) * eqVal; + Rd_VPR64.4H[16,16] = zext(Rn_VPR64.4H[16,16] s<= zero) * eqVal; + Rd_VPR64.4H[32,16] = zext(Rn_VPR64.4H[32,16] s<= zero) * eqVal; + Rd_VPR64.4H[48,16] = zext(Rn_VPR64.4H[48,16] s<= zero) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.35 CMLE (zero) page C7-2085 line 121446 MATCH x2e209800/mask=xbf3ffc00 @@ -2090,73 +2654,80 @@ is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0x :cmle Rd_VPR128.8H, Rn_VPR128.8H, "#0" is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR128.8H & Rd_VPR128.8H & Zd { - Rd_VPR128.8H = NEON_cmle(Rn_VPR128.8H, 0:2, 2:1); + local eqVal:2 = ~ 0; + local zero:2 = 0; + Rd_VPR128.8H[0,16] = zext(Rn_VPR128.8H[0,16] s<= zero) * eqVal; + Rd_VPR128.8H[16,16] = zext(Rn_VPR128.8H[16,16] s<= zero) * eqVal; + Rd_VPR128.8H[32,16] = zext(Rn_VPR128.8H[32,16] s<= zero) * eqVal; + Rd_VPR128.8H[48,16] = zext(Rn_VPR128.8H[48,16] s<= zero) * eqVal; + Rd_VPR128.8H[64,16] = zext(Rn_VPR128.8H[64,16] s<= zero) * eqVal; + Rd_VPR128.8H[80,16] = zext(Rn_VPR128.8H[80,16] s<= zero) * eqVal; + Rd_VPR128.8H[96,16] = zext(Rn_VPR128.8H[96,16] s<= zero) * eqVal; + Rd_VPR128.8H[112,16] = zext(Rn_VPR128.8H[112,16] s<= zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } -# C7.2.35 CMLE (zero) page C7-2085 line 121446 MATCH x7e209800/mask=xff3ffc00 -# CONSTRUCT x7ee09800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:8 =NEON_cmle/2 -# AUNIT --inst x7ee09800/mask=xfffffc00 --status nopcodeop +# C7.2.35 CMLE (zero) page C7-2085 line 121446 MATCH x2e209800/mask=xbf3ffc00 +# CONSTRUCT x2ea09800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_cmle/2@4 +# AUNIT --inst x2ea09800/mask=xfffffc00 --status nopcodeop -:cmle Rd_FPR64, Rn_FPR64, "#0" -is b_2431=0b01111110 & b_2223=0b11 & b_1021=0b100000100110 & Rd_FPR64 & Rn_FPR64 & Zd +:cmle Rd_VPR64.2S, Rn_VPR64.2S, "#0" +is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR64.2S & Rd_VPR64.2S & Zd { - Rd_FPR64 = NEON_cmle(Rn_FPR64, 0:8); + local eqVal:4 = ~ 0; + local zero:4 = 0; + Rd_VPR64.2S[0,32] = zext(Rn_VPR64.2S[0,32] s<= zero) * eqVal; + Rd_VPR64.2S[32,32] = zext(Rn_VPR64.2S[32,32] s<= zero) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } -# C7.2.36 CMLT (zero) page C7-2088 line 121604 MATCH x0e20a800/mask=xbf3ffc00 -# CONSTRUCT x4e20a800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:1 =NEON_cmlt/2@1 -# AUNIT --inst x4e20a800/mask=xfffffc00 --status nopcodeop +# C7.2.35 CMLE (zero) page C7-2085 line 121446 MATCH x2e209800/mask=xbf3ffc00 +# CONSTRUCT x6ea09800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_cmle/2@4 +# AUNIT --inst x6ea09800/mask=xfffffc00 --status nopcodeop -:cmlt Rd_VPR128.16B, Rn_VPR128.16B, "#0" -is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0xa & b_1011=2 & Rn_VPR128.16B & Rd_VPR128.16B & Zd +:cmle Rd_VPR128.4S, Rn_VPR128.4S, "#0" +is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR128.4S & Rd_VPR128.4S & Zd { - Rd_VPR128.16B = NEON_cmlt(Rn_VPR128.16B, 0:1, 1:1); + local eqVal:4 = ~ 0; + local zero:4 = 0; + Rd_VPR128.4S[0,32] = zext(Rn_VPR128.4S[0,32] s<= zero) * eqVal; + Rd_VPR128.4S[32,32] = zext(Rn_VPR128.4S[32,32] s<= zero) * eqVal; + Rd_VPR128.4S[64,32] = zext(Rn_VPR128.4S[64,32] s<= zero) * eqVal; + Rd_VPR128.4S[96,32] = zext(Rn_VPR128.4S[96,32] s<= zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } -# C7.2.36 CMLT (zero) page C7-2088 line 121604 MATCH x0e20a800/mask=xbf3ffc00 -# CONSTRUCT x4ee0a800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:8 =NEON_cmlt/2@8 -# AUNIT --inst x4ee0a800/mask=xfffffc00 --status nopcodeop +# C7.2.35 CMLE (zero) page C7-2085 line 121446 MATCH x2e209800/mask=xbf3ffc00 +# CONSTRUCT x6ee09800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:8 =NEON_cmle/2@8 +# AUNIT --inst x6ee09800/mask=xfffffc00 --status nopcodeop -:cmlt Rd_VPR128.2D, Rn_VPR128.2D, "#0" -is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=3 & b_1721=0x10 & b_1216=0xa & b_1011=2 & Rn_VPR128.2D & Rd_VPR128.2D & Zd +:cmle Rd_VPR128.2D, Rn_VPR128.2D, "#0" +is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=3 & b_1721=0x10 & b_1216=0x9 & b_1011=2 & Rn_VPR128.2D & Rd_VPR128.2D & Zd { - Rd_VPR128.2D = NEON_cmlt(Rn_VPR128.2D, 0:8, 8:1); + local eqVal:8 = ~ 0; + local zero:8 = 0; + Rd_VPR128.2D[0,64] = zext(Rn_VPR128.2D[0,64] s<= zero) * eqVal; + Rd_VPR128.2D[64,64] = zext(Rn_VPR128.2D[64,64] s<= zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } -# C7.2.36 CMLT (zero) page C7-2088 line 121604 MATCH x0e20a800/mask=xbf3ffc00 -# CONSTRUCT x0ea0a800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_cmlt/2@4 -# AUNIT --inst x0ea0a800/mask=xfffffc00 --status nopcodeop -:cmlt Rd_VPR64.2S, Rn_VPR64.2S, "#0" -is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0xa & b_1011=2 & Rn_VPR64.2S & Rd_VPR64.2S & Zd +# C7.2.36 CMLT (zero) page C7-2088 line 121604 MATCH x5e20a800/mask=xff3ffc00 +# CONSTRUCT x5ee0a800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:8 =NEON_cmlt/2 +# AUNIT --inst x5ee0a800/mask=xfffffc00 --status nopcodeop + +:cmlt Rd_FPR64, Rn_FPR64, "#0" +is b_2431=0b01011110 & b_2223=0b11 & b_1021=0b100000101010 & Rd_FPR64 & Rn_FPR64 & Zd { - Rd_VPR64.2S = NEON_cmlt(Rn_VPR64.2S, 0:4, 4:1); -} - -# C7.2.36 CMLT (zero) page C7-2088 line 121604 MATCH x0e20a800/mask=xbf3ffc00 -# CONSTRUCT x0e60a800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:2 =NEON_cmlt/2@2 -# AUNIT --inst x0e60a800/mask=xfffffc00 --status nopcodeop - -:cmlt Rd_VPR64.4H, Rn_VPR64.4H, "#0" -is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x10 & b_1216=0xa & b_1011=2 & Rn_VPR64.4H & Rd_VPR64.4H & Zd -{ - Rd_VPR64.4H = NEON_cmlt(Rn_VPR64.4H, 0:2, 2:1); -} - -# C7.2.36 CMLT (zero) page C7-2088 line 121604 MATCH x0e20a800/mask=xbf3ffc00 -# CONSTRUCT x4ea0a800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_cmlt/2@4 -# AUNIT --inst x4ea0a800/mask=xfffffc00 --status nopcodeop - -:cmlt Rd_VPR128.4S, Rn_VPR128.4S, "#0" -is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0xa & b_1011=2 & Rn_VPR128.4S & Rd_VPR128.4S & Zd -{ - Rd_VPR128.4S = NEON_cmlt(Rn_VPR128.4S, 0:4, 4:1); + local tmp1:1 = Rn_FPR64 s< 0; + local tmp2:8 = zext(tmp1); + local tmp3:8 = ~ 0:8; + Rd_FPR64 = tmp2 * tmp3; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.36 CMLT (zero) page C7-2088 line 121604 MATCH x0e20a800/mask=xbf3ffc00 @@ -2167,7 +2738,63 @@ is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0x :cmlt Rd_VPR64.8B, Rn_VPR64.8B, "#0" is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0xa & b_1011=2 & Rn_VPR64.8B & Rd_VPR64.8B & Zd { - Rd_VPR64.8B = NEON_cmlt(Rn_VPR64.8B, 0:1, 1:1); + local eqVal:1 = ~ 0; + local zero:1 = 0; + Rd_VPR64.8B[0,8] = (Rn_VPR64.8B[0,8] s< zero) * eqVal; + Rd_VPR64.8B[8,8] = (Rn_VPR64.8B[8,8] s< zero) * eqVal; + Rd_VPR64.8B[16,8] = (Rn_VPR64.8B[16,8] s< zero) * eqVal; + Rd_VPR64.8B[24,8] = (Rn_VPR64.8B[24,8] s< zero) * eqVal; + Rd_VPR64.8B[32,8] = (Rn_VPR64.8B[32,8] s< zero) * eqVal; + Rd_VPR64.8B[40,8] = (Rn_VPR64.8B[40,8] s< zero) * eqVal; + Rd_VPR64.8B[48,8] = (Rn_VPR64.8B[48,8] s< zero) * eqVal; + Rd_VPR64.8B[56,8] = (Rn_VPR64.8B[56,8] s< zero) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd +} + +# C7.2.36 CMLT (zero) page C7-2088 line 121604 MATCH x0e20a800/mask=xbf3ffc00 +# CONSTRUCT x4e20a800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:1 =NEON_cmlt/2@1 +# AUNIT --inst x4e20a800/mask=xfffffc00 --status nopcodeop + +:cmlt Rd_VPR128.16B, Rn_VPR128.16B, "#0" +is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0xa & b_1011=2 & Rn_VPR128.16B & Rd_VPR128.16B & Zd +{ + local eqVal:1 = ~ 0; + local zero:1 = 0; + Rd_VPR128.16B[0,8] = (Rn_VPR128.16B[0,8] s< zero) * eqVal; + Rd_VPR128.16B[8,8] = (Rn_VPR128.16B[8,8] s< zero) * eqVal; + Rd_VPR128.16B[16,8] = (Rn_VPR128.16B[16,8] s< zero) * eqVal; + Rd_VPR128.16B[24,8] = (Rn_VPR128.16B[24,8] s< zero) * eqVal; + Rd_VPR128.16B[32,8] = (Rn_VPR128.16B[32,8] s< zero) * eqVal; + Rd_VPR128.16B[40,8] = (Rn_VPR128.16B[40,8] s< zero) * eqVal; + Rd_VPR128.16B[48,8] = (Rn_VPR128.16B[48,8] s< zero) * eqVal; + Rd_VPR128.16B[56,8] = (Rn_VPR128.16B[56,8] s< zero) * eqVal; + Rd_VPR128.16B[64,8] = (Rn_VPR128.16B[64,8] s< zero) * eqVal; + Rd_VPR128.16B[72,8] = (Rn_VPR128.16B[72,8] s< zero) * eqVal; + Rd_VPR128.16B[80,8] = (Rn_VPR128.16B[80,8] s< zero) * eqVal; + Rd_VPR128.16B[88,8] = (Rn_VPR128.16B[88,8] s< zero) * eqVal; + Rd_VPR128.16B[96,8] = (Rn_VPR128.16B[96,8] s< zero) * eqVal; + Rd_VPR128.16B[104,8] = (Rn_VPR128.16B[104,8] s< zero) * eqVal; + Rd_VPR128.16B[112,8] = (Rn_VPR128.16B[112,8] s< zero) * eqVal; + Rd_VPR128.16B[120,8] = (Rn_VPR128.16B[120,8] s< zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd +} + +# C7.2.36 CMLT (zero) page C7-2088 line 121604 MATCH x0e20a800/mask=xbf3ffc00 +# CONSTRUCT x0e60a800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:2 =NEON_cmlt/2@2 +# AUNIT --inst x0e60a800/mask=xfffffc00 --status nopcodeop + +:cmlt Rd_VPR64.4H, Rn_VPR64.4H, "#0" +is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x10 & b_1216=0xa & b_1011=2 & Rn_VPR64.4H & Rd_VPR64.4H & Zd +{ + local eqVal:2 = ~ 0; + local zero:2 = 0; + Rd_VPR64.4H[0,16] = zext(Rn_VPR64.4H[0,16] s< zero) * eqVal; + Rd_VPR64.4H[16,16] = zext(Rn_VPR64.4H[16,16] s< zero) * eqVal; + Rd_VPR64.4H[32,16] = zext(Rn_VPR64.4H[32,16] s< zero) * eqVal; + Rd_VPR64.4H[48,16] = zext(Rn_VPR64.4H[48,16] s< zero) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.36 CMLT (zero) page C7-2088 line 121604 MATCH x0e20a800/mask=xbf3ffc00 @@ -2178,73 +2805,80 @@ is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0x :cmlt Rd_VPR128.8H, Rn_VPR128.8H, "#0" is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x10 & b_1216=0xa & b_1011=2 & Rn_VPR128.8H & Rd_VPR128.8H & Zd { - Rd_VPR128.8H = NEON_cmlt(Rn_VPR128.8H, 0:2, 2:1); + local eqVal:2 = ~ 0; + local zero:2 = 0; + Rd_VPR128.8H[0,16] = zext(Rn_VPR128.8H[0,16] s< zero) * eqVal; + Rd_VPR128.8H[16,16] = zext(Rn_VPR128.8H[16,16] s< zero) * eqVal; + Rd_VPR128.8H[32,16] = zext(Rn_VPR128.8H[32,16] s< zero) * eqVal; + Rd_VPR128.8H[48,16] = zext(Rn_VPR128.8H[48,16] s< zero) * eqVal; + Rd_VPR128.8H[64,16] = zext(Rn_VPR128.8H[64,16] s< zero) * eqVal; + Rd_VPR128.8H[80,16] = zext(Rn_VPR128.8H[80,16] s< zero) * eqVal; + Rd_VPR128.8H[96,16] = zext(Rn_VPR128.8H[96,16] s< zero) * eqVal; + Rd_VPR128.8H[112,16] = zext(Rn_VPR128.8H[112,16] s< zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } -# C7.2.36 CMLT (zero) page C7-2088 line 121604 MATCH x5e20a800/mask=xff3ffc00 -# CONSTRUCT x5ee0a800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 0:8 =NEON_cmlt/2 -# AUNIT --inst x5ee0a800/mask=xfffffc00 --status nopcodeop +# C7.2.36 CMLT (zero) page C7-2088 line 121604 MATCH x0e20a800/mask=xbf3ffc00 +# CONSTRUCT x0ea0a800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_cmlt/2@4 +# AUNIT --inst x0ea0a800/mask=xfffffc00 --status nopcodeop -:cmlt Rd_FPR64, Rn_FPR64, "#0" -is b_2431=0b01011110 & b_2223=0b11 & b_1021=0b100000101010 & Rd_FPR64 & Rn_FPR64 & Zd +:cmlt Rd_VPR64.2S, Rn_VPR64.2S, "#0" +is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0xa & b_1011=2 & Rn_VPR64.2S & Rd_VPR64.2S & Zd { - Rd_FPR64 = NEON_cmlt(Rn_FPR64, 0:8); + local eqVal:4 = ~ 0; + local zero:4 = 0; + Rd_VPR64.2S[0,32] = zext(Rn_VPR64.2S[0,32] s< zero) * eqVal; + Rd_VPR64.2S[32,32] = zext(Rn_VPR64.2S[32,32] s< zero) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } -# C7.2.37 CMTST page C7-2090 line 121743 MATCH x0e208c00/mask=xbf20fc00 -# CONSTRUCT x4e208c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmtst/2@1 -# AUNIT --inst x4e208c00/mask=xffe0fc00 --status nopcodeop +# C7.2.36 CMLT (zero) page C7-2088 line 121604 MATCH x0e20a800/mask=xbf3ffc00 +# CONSTRUCT x4ea0a800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_cmlt/2@4 +# AUNIT --inst x4ea0a800/mask=xfffffc00 --status nopcodeop -:cmtst Rd_VPR128.16B, Rn_VPR128.16B, Rm_VPR128.16B -is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_2121=1 & Rm_VPR128.16B & b_1115=0x11 & b_1010=1 & Rn_VPR128.16B & Rd_VPR128.16B & Zd +:cmlt Rd_VPR128.4S, Rn_VPR128.4S, "#0" +is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0xa & b_1011=2 & Rn_VPR128.4S & Rd_VPR128.4S & Zd { - Rd_VPR128.16B = NEON_cmtst(Rn_VPR128.16B, Rm_VPR128.16B, 1:1); + local eqVal:4 = ~ 0; + local zero:4 = 0; + Rd_VPR128.4S[0,32] = zext(Rn_VPR128.4S[0,32] s< zero) * eqVal; + Rd_VPR128.4S[32,32] = zext(Rn_VPR128.4S[32,32] s< zero) * eqVal; + Rd_VPR128.4S[64,32] = zext(Rn_VPR128.4S[64,32] s< zero) * eqVal; + Rd_VPR128.4S[96,32] = zext(Rn_VPR128.4S[96,32] s< zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } -# C7.2.37 CMTST page C7-2090 line 121743 MATCH x0e208c00/mask=xbf20fc00 -# CONSTRUCT x4ee08c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmtst/2@8 -# AUNIT --inst x4ee08c00/mask=xffe0fc00 --status nopcodeop +# C7.2.36 CMLT (zero) page C7-2088 line 121604 MATCH x0e20a800/mask=xbf3ffc00 +# CONSTRUCT x4ee0a800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 0:8 =NEON_cmlt/2@8 +# AUNIT --inst x4ee0a800/mask=xfffffc00 --status nopcodeop -:cmtst Rd_VPR128.2D, Rn_VPR128.2D, Rm_VPR128.2D -is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=3 & b_2121=1 & Rm_VPR128.2D & b_1115=0x11 & b_1010=1 & Rn_VPR128.2D & Rd_VPR128.2D & Zd +:cmlt Rd_VPR128.2D, Rn_VPR128.2D, "#0" +is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=3 & b_1721=0x10 & b_1216=0xa & b_1011=2 & Rn_VPR128.2D & Rd_VPR128.2D & Zd { - Rd_VPR128.2D = NEON_cmtst(Rn_VPR128.2D, Rm_VPR128.2D, 8:1); + local eqVal:8 = ~ 0; + local zero:8 = 0; + Rd_VPR128.2D[0,64] = zext(Rn_VPR128.2D[0,64] s< zero) * eqVal; + Rd_VPR128.2D[64,64] = zext(Rn_VPR128.2D[64,64] s< zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } -# C7.2.37 CMTST page C7-2090 line 121743 MATCH x0e208c00/mask=xbf20fc00 -# CONSTRUCT x0ea08c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmtst/2@4 -# AUNIT --inst x0ea08c00/mask=xffe0fc00 --status nopcodeop -:cmtst Rd_VPR64.2S, Rn_VPR64.2S, Rm_VPR64.2S -is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR64.2S & b_1115=0x11 & b_1010=1 & Rn_VPR64.2S & Rd_VPR64.2S & Zd +# C7.2.37 CMTST page C7-2090 line 121743 MATCH x5e208c00/mask=xff20fc00 +# CONSTRUCT x5ee08c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmtst/2 +# AUNIT --inst x5ee08c00/mask=xffe0fc00 --status nopcodeop + +:cmtst Rd_FPR64, Rn_FPR64, Rm_FPR64 +is b_2431=0b01011110 & b_2223=0b11 & b_21=1 & b_1015=0b100011 & Rd_FPR64 & Rn_FPR64 & Rm_FPR64 & Zd { - Rd_VPR64.2S = NEON_cmtst(Rn_VPR64.2S, Rm_VPR64.2S, 4:1); -} - -# C7.2.37 CMTST page C7-2090 line 121743 MATCH x0e208c00/mask=xbf20fc00 -# CONSTRUCT x0e608c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmtst/2@2 -# AUNIT --inst x0e608c00/mask=xffe0fc00 --status nopcodeop - -:cmtst Rd_VPR64.4H, Rn_VPR64.4H, Rm_VPR64.4H -is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR64.4H & b_1115=0x11 & b_1010=1 & Rn_VPR64.4H & Rd_VPR64.4H & Zd -{ - Rd_VPR64.4H = NEON_cmtst(Rn_VPR64.4H, Rm_VPR64.4H, 2:1); -} - -# C7.2.37 CMTST page C7-2090 line 121743 MATCH x0e208c00/mask=xbf20fc00 -# CONSTRUCT x4ea08c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmtst/2@4 -# AUNIT --inst x4ea08c00/mask=xffe0fc00 --status nopcodeop - -:cmtst Rd_VPR128.4S, Rn_VPR128.4S, Rm_VPR128.4S -is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR128.4S & b_1115=0x11 & b_1010=1 & Rn_VPR128.4S & Rd_VPR128.4S & Zd -{ - Rd_VPR128.4S = NEON_cmtst(Rn_VPR128.4S, Rm_VPR128.4S, 4:1); + local tmp1:1 = (Rn_FPR64 & Rm_FPR64) != 0; + local tmp2:8 = zext(tmp1); + local tmp3:8 = ~ 0:8; + Rd_FPR64 = tmp2 * tmp3; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.37 CMTST page C7-2090 line 121743 MATCH x0e208c00/mask=xbf20fc00 @@ -2255,7 +2889,60 @@ is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR128.4S :cmtst Rd_VPR64.8B, Rn_VPR64.8B, Rm_VPR64.8B is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_2121=1 & Rm_VPR64.8B & b_1115=0x11 & b_1010=1 & Rn_VPR64.8B & Rd_VPR64.8B & Zd { - Rd_VPR64.8B = NEON_cmtst(Rn_VPR64.8B, Rm_VPR64.8B, 1:1); + local eqVal:1 = ~ 0; + Rd_VPR64.8B[0,8] = ((Rn_VPR64.8B[0,8] & Rm_VPR64.8B[0,8]) != 0) * eqVal; + Rd_VPR64.8B[8,8] = ((Rn_VPR64.8B[8,8] & Rm_VPR64.8B[8,8]) != 0) * eqVal; + Rd_VPR64.8B[16,8] = ((Rn_VPR64.8B[16,8] & Rm_VPR64.8B[16,8]) != 0) * eqVal; + Rd_VPR64.8B[24,8] = ((Rn_VPR64.8B[24,8] & Rm_VPR64.8B[24,8]) != 0) * eqVal; + Rd_VPR64.8B[32,8] = ((Rn_VPR64.8B[32,8] & Rm_VPR64.8B[32,8]) != 0) * eqVal; + Rd_VPR64.8B[40,8] = ((Rn_VPR64.8B[40,8] & Rm_VPR64.8B[40,8]) != 0) * eqVal; + Rd_VPR64.8B[48,8] = ((Rn_VPR64.8B[48,8] & Rm_VPR64.8B[48,8]) != 0) * eqVal; + Rd_VPR64.8B[56,8] = ((Rn_VPR64.8B[56,8] & Rm_VPR64.8B[56,8]) != 0) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd +} + +# C7.2.37 CMTST page C7-2090 line 121743 MATCH x0e208c00/mask=xbf20fc00 +# CONSTRUCT x4e208c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmtst/2@1 +# AUNIT --inst x4e208c00/mask=xffe0fc00 --status nopcodeop + +:cmtst Rd_VPR128.16B, Rn_VPR128.16B, Rm_VPR128.16B +is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_2121=1 & Rm_VPR128.16B & b_1115=0x11 & b_1010=1 & Rn_VPR128.16B & Rd_VPR128.16B & Zd +{ + local eqVal:1 = ~ 0; + Rd_VPR128.16B[0,8] = ((Rn_VPR128.16B[0,8] & Rm_VPR128.16B[0,8]) != 0) * eqVal; + Rd_VPR128.16B[8,8] = ((Rn_VPR128.16B[8,8] & Rm_VPR128.16B[8,8]) != 0) * eqVal; + Rd_VPR128.16B[16,8] = ((Rn_VPR128.16B[16,8] & Rm_VPR128.16B[16,8]) != 0) * eqVal; + Rd_VPR128.16B[24,8] = ((Rn_VPR128.16B[24,8] & Rm_VPR128.16B[24,8]) != 0) * eqVal; + Rd_VPR128.16B[32,8] = ((Rn_VPR128.16B[32,8] & Rm_VPR128.16B[32,8]) != 0) * eqVal; + Rd_VPR128.16B[40,8] = ((Rn_VPR128.16B[40,8] & Rm_VPR128.16B[40,8]) != 0) * eqVal; + Rd_VPR128.16B[48,8] = ((Rn_VPR128.16B[48,8] & Rm_VPR128.16B[48,8]) != 0) * eqVal; + Rd_VPR128.16B[56,8] = ((Rn_VPR128.16B[56,8] & Rm_VPR128.16B[56,8]) != 0) * eqVal; + Rd_VPR128.16B[64,8] = ((Rn_VPR128.16B[64,8] & Rm_VPR128.16B[64,8]) != 0) * eqVal; + Rd_VPR128.16B[72,8] = ((Rn_VPR128.16B[72,8] & Rm_VPR128.16B[72,8]) != 0) * eqVal; + Rd_VPR128.16B[80,8] = ((Rn_VPR128.16B[80,8] & Rm_VPR128.16B[80,8]) != 0) * eqVal; + Rd_VPR128.16B[88,8] = ((Rn_VPR128.16B[88,8] & Rm_VPR128.16B[88,8]) != 0) * eqVal; + Rd_VPR128.16B[96,8] = ((Rn_VPR128.16B[96,8] & Rm_VPR128.16B[96,8]) != 0) * eqVal; + Rd_VPR128.16B[104,8] = ((Rn_VPR128.16B[104,8] & Rm_VPR128.16B[104,8]) != 0) * eqVal; + Rd_VPR128.16B[112,8] = ((Rn_VPR128.16B[112,8] & Rm_VPR128.16B[112,8]) != 0) * eqVal; + Rd_VPR128.16B[120,8] = ((Rn_VPR128.16B[120,8] & Rm_VPR128.16B[120,8]) != 0) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd +} + +# C7.2.37 CMTST page C7-2090 line 121743 MATCH x0e208c00/mask=xbf20fc00 +# CONSTRUCT x0e608c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmtst/2@2 +# AUNIT --inst x0e608c00/mask=xffe0fc00 --status nopcodeop + +:cmtst Rd_VPR64.4H, Rn_VPR64.4H, Rm_VPR64.4H +is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR64.4H & b_1115=0x11 & b_1010=1 & Rn_VPR64.4H & Rd_VPR64.4H & Zd +{ + local eqVal:2 = ~ 0; + Rd_VPR64.4H[0,16] = zext((Rn_VPR64.4H[0,16] & Rm_VPR64.4H[0,16]) != 0) * eqVal; + Rd_VPR64.4H[16,16] = zext((Rn_VPR64.4H[16,16] & Rm_VPR64.4H[16,16]) != 0) * eqVal; + Rd_VPR64.4H[32,16] = zext((Rn_VPR64.4H[32,16] & Rm_VPR64.4H[32,16]) != 0) * eqVal; + Rd_VPR64.4H[48,16] = zext((Rn_VPR64.4H[48,16] & Rm_VPR64.4H[48,16]) != 0) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.37 CMTST page C7-2090 line 121743 MATCH x0e208c00/mask=xbf20fc00 @@ -2266,29 +2953,60 @@ is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_2121=1 & Rm_VPR64.8B :cmtst Rd_VPR128.8H, Rn_VPR128.8H, Rm_VPR128.8H is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR128.8H & b_1115=0x11 & b_1010=1 & Rn_VPR128.8H & Rd_VPR128.8H & Zd { - Rd_VPR128.8H = NEON_cmtst(Rn_VPR128.8H, Rm_VPR128.8H, 2:1); + local eqVal:2 = ~ 0; + Rd_VPR128.8H[0,16] = zext((Rn_VPR128.8H[0,16] & Rm_VPR128.8H[0,16]) != 0) * eqVal; + Rd_VPR128.8H[16,16] = zext((Rn_VPR128.8H[16,16] & Rm_VPR128.8H[16,16]) != 0) * eqVal; + Rd_VPR128.8H[32,16] = zext((Rn_VPR128.8H[32,16] & Rm_VPR128.8H[32,16]) != 0) * eqVal; + Rd_VPR128.8H[48,16] = zext((Rn_VPR128.8H[48,16] & Rm_VPR128.8H[48,16]) != 0) * eqVal; + Rd_VPR128.8H[64,16] = zext((Rn_VPR128.8H[64,16] & Rm_VPR128.8H[64,16]) != 0) * eqVal; + Rd_VPR128.8H[80,16] = zext((Rn_VPR128.8H[80,16] & Rm_VPR128.8H[80,16]) != 0) * eqVal; + Rd_VPR128.8H[96,16] = zext((Rn_VPR128.8H[96,16] & Rm_VPR128.8H[96,16]) != 0) * eqVal; + Rd_VPR128.8H[112,16] = zext((Rn_VPR128.8H[112,16] & Rm_VPR128.8H[112,16]) != 0) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } -# C7.2.37 CMTST page C7-2090 line 121743 MATCH x5e208c00/mask=xff20fc00 -# CONSTRUCT x5ee08c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmtst/2 -# AUNIT --inst x5ee08c00/mask=xffe0fc00 --status nopcodeop +# C7.2.37 CMTST page C7-2090 line 121743 MATCH x0e208c00/mask=xbf20fc00 +# CONSTRUCT x0ea08c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmtst/2@4 +# AUNIT --inst x0ea08c00/mask=xffe0fc00 --status nopcodeop -:cmtst Rd_FPR64, Rn_FPR64, Rm_FPR64 -is b_2431=0b01011110 & b_2223=0b11 & b_21=1 & b_1015=0b100011 & Rd_FPR64 & Rn_FPR64 & Rm_FPR64 & Zd +:cmtst Rd_VPR64.2S, Rn_VPR64.2S, Rm_VPR64.2S +is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR64.2S & b_1115=0x11 & b_1010=1 & Rn_VPR64.2S & Rd_VPR64.2S & Zd { - Rd_FPR64 = NEON_cmtst(Rn_FPR64, Rm_FPR64); + local eqVal:4 = ~ 0; + Rd_VPR64.2S[0,32] = zext((Rn_VPR64.2S[0,32] & Rm_VPR64.2S[0,32]) != 0) * eqVal; + Rd_VPR64.2S[32,32] = zext((Rn_VPR64.2S[32,32] & Rm_VPR64.2S[32,32]) != 0) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } -# C7.2.38 CNT page C7-2092 line 121883 MATCH x0e205800/mask=xbf3ffc00 -# CONSTRUCT x4e205800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES -# SMACRO(pseudo) ARG1 ARG2 =NEON_cnt/1@1 -# AUNIT --inst x4e205800/mask=xfffffc00 --status nopcodeop +# C7.2.37 CMTST page C7-2090 line 121743 MATCH x0e208c00/mask=xbf20fc00 +# CONSTRUCT x4ea08c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmtst/2@4 +# AUNIT --inst x4ea08c00/mask=xffe0fc00 --status nopcodeop -:cnt Rd_VPR128.16B, Rn_VPR128.16B -is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0x5 & b_1011=2 & Rn_VPR128.16B & Rd_VPR128.16B & Zd +:cmtst Rd_VPR128.4S, Rn_VPR128.4S, Rm_VPR128.4S +is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR128.4S & b_1115=0x11 & b_1010=1 & Rn_VPR128.4S & Rd_VPR128.4S & Zd { - Rd_VPR128.16B = NEON_cnt(Rn_VPR128.16B, 1:1); + local eqVal:4 = ~ 0; + Rd_VPR128.4S[0,32] = zext((Rn_VPR128.4S[0,32] & Rm_VPR128.4S[0,32]) != 0) * eqVal; + Rd_VPR128.4S[32,32] = zext((Rn_VPR128.4S[32,32] & Rm_VPR128.4S[32,32]) != 0) * eqVal; + Rd_VPR128.4S[64,32] = zext((Rn_VPR128.4S[64,32] & Rm_VPR128.4S[64,32]) != 0) * eqVal; + Rd_VPR128.4S[96,32] = zext((Rn_VPR128.4S[96,32] & Rm_VPR128.4S[96,32]) != 0) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd +} + +# C7.2.37 CMTST page C7-2090 line 121743 MATCH x0e208c00/mask=xbf20fc00 +# CONSTRUCT x4ee08c00/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_cmtst/2@8 +# AUNIT --inst x4ee08c00/mask=xffe0fc00 --status nopcodeop + +:cmtst Rd_VPR128.2D, Rn_VPR128.2D, Rm_VPR128.2D +is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=3 & b_2121=1 & Rm_VPR128.2D & b_1115=0x11 & b_1010=1 & Rn_VPR128.2D & Rd_VPR128.2D & Zd +{ + local eqVal:8 = ~ 0; + Rd_VPR128.2D[0,64] = zext((Rn_VPR128.2D[0,64] & Rm_VPR128.2D[0,64]) != 0) * eqVal; + Rd_VPR128.2D[64,64] = zext((Rn_VPR128.2D[64,64] & Rm_VPR128.2D[64,64]) != 0) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.38 CNT page C7-2092 line 121883 MATCH x0e205800/mask=xbf3ffc00 @@ -2299,7 +3017,44 @@ is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0x :cnt Rd_VPR64.8B, Rn_VPR64.8B is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0x5 & b_1011=2 & Rn_VPR64.8B & Rd_VPR64.8B & Zd { - Rd_VPR64.8B = NEON_cnt(Rn_VPR64.8B, 1:1); + # simd unary Rd_VPR64.8B = popcount(Rn_VPR64.8B) on lane size 1 + Rd_VPR64.8B[0,8] = popcount(Rn_VPR64.8B[0,8]); + Rd_VPR64.8B[8,8] = popcount(Rn_VPR64.8B[8,8]); + Rd_VPR64.8B[16,8] = popcount(Rn_VPR64.8B[16,8]); + Rd_VPR64.8B[24,8] = popcount(Rn_VPR64.8B[24,8]); + Rd_VPR64.8B[32,8] = popcount(Rn_VPR64.8B[32,8]); + Rd_VPR64.8B[40,8] = popcount(Rn_VPR64.8B[40,8]); + Rd_VPR64.8B[48,8] = popcount(Rn_VPR64.8B[48,8]); + Rd_VPR64.8B[56,8] = popcount(Rn_VPR64.8B[56,8]); + zext_zd(Zd); # zero upper 24 bytes of Zd +} + +# C7.2.38 CNT page C7-2092 line 121883 MATCH x0e205800/mask=xbf3ffc00 +# CONSTRUCT x4e205800/mask=xfffffc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 =NEON_cnt/1@1 +# AUNIT --inst x4e205800/mask=xfffffc00 --status nopcodeop + +:cnt Rd_VPR128.16B, Rn_VPR128.16B +is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0x5 & b_1011=2 & Rn_VPR128.16B & Rd_VPR128.16B & Zd +{ + # simd unary Rd_VPR128.16B = popcount(Rn_VPR128.16B) on lane size 1 + Rd_VPR128.16B[0,8] = popcount(Rn_VPR128.16B[0,8]); + Rd_VPR128.16B[8,8] = popcount(Rn_VPR128.16B[8,8]); + Rd_VPR128.16B[16,8] = popcount(Rn_VPR128.16B[16,8]); + Rd_VPR128.16B[24,8] = popcount(Rn_VPR128.16B[24,8]); + Rd_VPR128.16B[32,8] = popcount(Rn_VPR128.16B[32,8]); + Rd_VPR128.16B[40,8] = popcount(Rn_VPR128.16B[40,8]); + Rd_VPR128.16B[48,8] = popcount(Rn_VPR128.16B[48,8]); + Rd_VPR128.16B[56,8] = popcount(Rn_VPR128.16B[56,8]); + Rd_VPR128.16B[64,8] = popcount(Rn_VPR128.16B[64,8]); + Rd_VPR128.16B[72,8] = popcount(Rn_VPR128.16B[72,8]); + Rd_VPR128.16B[80,8] = popcount(Rn_VPR128.16B[80,8]); + Rd_VPR128.16B[88,8] = popcount(Rn_VPR128.16B[88,8]); + Rd_VPR128.16B[96,8] = popcount(Rn_VPR128.16B[96,8]); + Rd_VPR128.16B[104,8] = popcount(Rn_VPR128.16B[104,8]); + Rd_VPR128.16B[112,8] = popcount(Rn_VPR128.16B[112,8]); + Rd_VPR128.16B[120,8] = popcount(Rn_VPR128.16B[120,8]); + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.39 DUP (element) page C7-2094 line 121971 MATCH x0e000400/mask=xbfe0fc00 @@ -3062,7 +3817,10 @@ is m=0 & b_3030=0 & s=0 & b_2428=0x1e & ftype=0 & b_2121=1 & fpDpOpcode=0x1 & b_ :facge Rd_VPR128.2D, Rn_VPR128.2D, Rm_VPR128.2D is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_21=1 & Rm_VPR128.2D & b_1115=0x1d & b_1010=1 & Rn_VPR128.2D & Rd_VPR128.2D & Zd { - Rd_VPR128.2D = NEON_facge(Rn_VPR128.2D, Rm_VPR128.2D, 8:1); + local eqVal:8 = ~ 0; + Rd_VPR128.2D[0,64] = zext(abs(Rn_VPR128.2D[0,64]) f>= abs(Rm_VPR128.2D[0,64])) * eqVal; + Rd_VPR128.2D[64,64] = zext(abs(Rn_VPR128.2D[64,64]) f>= abs(Rm_VPR128.2D[64,64])) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.47 FACGE page C7-2111 line 122911 MATCH x2e20ec00/mask=xbfa0fc00 @@ -3073,7 +3831,10 @@ is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_21=1 & Rm_VPR128.2D & :facge Rd_VPR64.2S, Rn_VPR64.2S, Rm_VPR64.2S is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_21=1 & Rm_VPR64.2S & b_1115=0x1d & b_1010=1 & Rn_VPR64.2S & Rd_VPR64.2S & Zd { - Rd_VPR64.2S = NEON_facge(Rn_VPR64.2S, Rm_VPR64.2S, 4:1); + local eqVal:4 = ~ 0; + Rd_VPR64.2S[0,32] = zext(abs(Rn_VPR64.2S[0,32]) f>= abs(Rm_VPR64.2S[0,32])) * eqVal; + Rd_VPR64.2S[32,32] = zext(abs(Rn_VPR64.2S[32,32]) f>= abs(Rm_VPR64.2S[32,32])) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.47 FACGE page C7-2111 line 122911 MATCH x2e20ec00/mask=xbfa0fc00 @@ -3084,7 +3845,12 @@ is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_21=1 & Rm_VPR64.2S & :facge Rd_VPR128.4S, Rn_VPR128.4S, Rm_VPR128.4S is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_21=1 & Rm_VPR128.4S & b_1115=0x1d & b_1010=1 & Rn_VPR128.4S & Rd_VPR128.4S & Zd { - Rd_VPR128.4S = NEON_facge(Rn_VPR128.4S, Rm_VPR128.4S, 4:1); + local eqVal:4 = ~ 0; + Rd_VPR128.4S[0,32] = zext(abs(Rn_VPR128.4S[0,32]) f>= abs(Rm_VPR128.4S[0,32])) * eqVal; + Rd_VPR128.4S[32,32] = zext(abs(Rn_VPR128.4S[32,32]) f>= abs(Rm_VPR128.4S[32,32])) * eqVal; + Rd_VPR128.4S[64,32] = zext(abs(Rn_VPR128.4S[64,32]) f>= abs(Rm_VPR128.4S[64,32])) * eqVal; + Rd_VPR128.4S[96,32] = zext(abs(Rn_VPR128.4S[96,32]) f>= abs(Rm_VPR128.4S[96,32])) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.47 FACGE page C7-2111 line 122911 MATCH x7e402c00/mask=xffe0fc00 @@ -3096,7 +3862,11 @@ is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_21=1 & Rm_VPR128.4S & :facge Rd_FPR16, Rn_FPR16, Rm_FPR16 is b_2131=0b01111110010 & b_1015=0b001011 & Rd_FPR16 & Rn_FPR16 & Rm_FPR16 & Zd { - Rd_FPR16 = NEON_facge(Rn_FPR16, Rm_FPR16); + local tmp1:1 = abs(Rn_FPR16) f>= abs(Rm_FPR16); + local tmp2:2 = zext(tmp1); + local tmp3:2 = ~ 0:2; + Rd_FPR16 = tmp2 * tmp3; + zext_zh(Zd); # zero upper 30 bytes of Zd } # C7.2.47 FACGE page C7-2111 line 122911 MATCH x7e20ec00/mask=xffa0fc00 @@ -3108,7 +3878,11 @@ is b_2131=0b01111110010 & b_1015=0b001011 & Rd_FPR16 & Rn_FPR16 & Rm_FPR16 & Zd :facge Rd_FPR32, Rn_FPR32, Rm_FPR32 is b_2331=0b011111100 & b_22=0 & b_21=1 & b_1015=0b111011 & Rd_FPR32 & Rn_FPR32 & Rm_FPR32 & Zd { - Rd_FPR32 = NEON_facge(Rn_FPR32, Rm_FPR32); + local tmp1:1 = abs(Rn_FPR32) f>= abs(Rm_FPR32); + local tmp2:4 = zext(tmp1); + local tmp3:4 = ~ 0:4; + Rd_FPR32 = tmp2 * tmp3; + zext_zs(Zd); # zero upper 28 bytes of Zd } # C7.2.47 FACGE page C7-2111 line 122911 MATCH x7e20ec00/mask=xffa0fc00 @@ -3120,7 +3894,11 @@ is b_2331=0b011111100 & b_22=0 & b_21=1 & b_1015=0b111011 & Rd_FPR32 & Rn_FPR32 :facge Rd_FPR64, Rn_FPR64, Rm_FPR64 is b_2331=0b011111100 & b_22=1 & b_21=1 & b_1015=0b111011 & Rd_FPR64 & Rn_FPR64 & Rm_FPR64 & Zd { - Rd_FPR64 = NEON_facge(Rn_FPR64, Rm_FPR64); + local tmp1:1 = abs(Rn_FPR64) f>= abs(Rm_FPR64); + local tmp2:8 = zext(tmp1); + local tmp3:8 = ~ 0:8; + Rd_FPR64 = tmp2 * tmp3; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.47 FACGE page C7-2111 line 122911 MATCH x2e402c00/mask=xbfe0fc00 @@ -3132,7 +3910,12 @@ is b_2331=0b011111100 & b_22=1 & b_21=1 & b_1015=0b111011 & Rd_FPR64 & Rn_FPR64 :facge Rd_VPR64.4H, Rn_VPR64.4H, Rm_VPR64.4H is b_31=0 & b_30=0 & b_2129=0b101110010 & b_1015=0b001011 & Rd_VPR64.4H & Rn_VPR64.4H & Rm_VPR64.4H & Zd { - Rd_VPR64.4H = NEON_facge(Rn_VPR64.4H, Rm_VPR64.4H, 2:1); + local eqVal:2 = ~ 0; + Rd_VPR64.4H[0,16] = zext(abs(Rn_VPR64.4H[0,16]) f>= abs(Rm_VPR64.4H[0,16])) * eqVal; + Rd_VPR64.4H[16,16] = zext(abs(Rn_VPR64.4H[16,16]) f>= abs(Rm_VPR64.4H[16,16])) * eqVal; + Rd_VPR64.4H[32,16] = zext(abs(Rn_VPR64.4H[32,16]) f>= abs(Rm_VPR64.4H[32,16])) * eqVal; + Rd_VPR64.4H[48,16] = zext(abs(Rn_VPR64.4H[48,16]) f>= abs(Rm_VPR64.4H[48,16])) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.47 FACGE page C7-2111 line 122911 MATCH x2e402c00/mask=xbfe0fc00 @@ -3144,7 +3927,16 @@ is b_31=0 & b_30=0 & b_2129=0b101110010 & b_1015=0b001011 & Rd_VPR64.4H & Rn_VPR :facge Rd_VPR128.8H, Rn_VPR128.8H, Rm_VPR128.8H is b_31=0 & b_30=1 & b_2129=0b101110010 & b_1015=0b001011 & Rd_VPR128.8H & Rn_VPR128.8H & Rm_VPR128.8H & Zd { - Rd_VPR128.8H = NEON_facge(Rn_VPR128.8H, Rm_VPR128.8H, 2:1); + local eqVal:2 = ~ 0; + Rd_VPR128.8H[0,16] = zext(abs(Rn_VPR128.8H[0,16]) f>= abs(Rm_VPR128.8H[0,16])) * eqVal; + Rd_VPR128.8H[16,16] = zext(abs(Rn_VPR128.8H[16,16]) f>= abs(Rm_VPR128.8H[16,16])) * eqVal; + Rd_VPR128.8H[32,16] = zext(abs(Rn_VPR128.8H[32,16]) f>= abs(Rm_VPR128.8H[32,16])) * eqVal; + Rd_VPR128.8H[48,16] = zext(abs(Rn_VPR128.8H[48,16]) f>= abs(Rm_VPR128.8H[48,16])) * eqVal; + Rd_VPR128.8H[64,16] = zext(abs(Rn_VPR128.8H[64,16]) f>= abs(Rm_VPR128.8H[64,16])) * eqVal; + Rd_VPR128.8H[80,16] = zext(abs(Rn_VPR128.8H[80,16]) f>= abs(Rm_VPR128.8H[80,16])) * eqVal; + Rd_VPR128.8H[96,16] = zext(abs(Rn_VPR128.8H[96,16]) f>= abs(Rm_VPR128.8H[96,16])) * eqVal; + Rd_VPR128.8H[112,16] = zext(abs(Rn_VPR128.8H[112,16]) f>= abs(Rm_VPR128.8H[112,16])) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.48 FACGT page C7-2115 line 123160 MATCH x2ea0ec00/mask=xbfa0fc00 @@ -3155,7 +3947,10 @@ is b_31=0 & b_30=1 & b_2129=0b101110010 & b_1015=0b001011 & Rd_VPR128.8H & Rn_VP :facgt Rd_VPR128.2D, Rn_VPR128.2D, Rm_VPR128.2D is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=3 & b_21=1 & Rm_VPR128.2D & b_1115=0x1d & b_1010=1 & Rn_VPR128.2D & Rd_VPR128.2D & Zd { - Rd_VPR128.2D = NEON_facgt(Rn_VPR128.2D, Rm_VPR128.2D, 8:1); + local eqVal:8 = ~ 0; + Rd_VPR128.2D[0,64] = zext(abs(Rn_VPR128.2D[0,64]) f> abs(Rm_VPR128.2D[0,64])) * eqVal; + Rd_VPR128.2D[64,64] = zext(abs(Rn_VPR128.2D[64,64]) f> abs(Rm_VPR128.2D[64,64])) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.48 FACGT page C7-2115 line 123160 MATCH x2ea0ec00/mask=xbfa0fc00 @@ -3166,7 +3961,10 @@ is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=3 & b_21=1 & Rm_VPR128.2D & :facgt Rd_VPR64.2S, Rn_VPR64.2S, Rm_VPR64.2S is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_21=1 & Rm_VPR64.2S & b_1115=0x1d & b_1010=1 & Rn_VPR64.2S & Rd_VPR64.2S & Zd { - Rd_VPR64.2S = NEON_facgt(Rn_VPR64.2S, Rm_VPR64.2S, 4:1); + local eqVal:4 = ~ 0; + Rd_VPR64.2S[0,32] = zext(abs(Rn_VPR64.2S[0,32]) f> abs(Rm_VPR64.2S[0,32])) * eqVal; + Rd_VPR64.2S[32,32] = zext(abs(Rn_VPR64.2S[32,32]) f> abs(Rm_VPR64.2S[32,32])) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.48 FACGT page C7-2115 line 123160 MATCH x2ea0ec00/mask=xbfa0fc00 @@ -3177,7 +3975,13 @@ is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_21=1 & Rm_VPR64.2S & :facgt Rd_VPR128.4S, Rn_VPR128.4S, Rm_VPR128.4S is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_21=1 & Rm_VPR128.4S & b_1115=0x1d & b_1010=1 & Rn_VPR128.4S & Rd_VPR128.4S & Zd { - Rd_VPR128.4S = NEON_facgt(Rn_VPR128.4S, Rm_VPR128.4S, 4:1); + local eqVal:4 = ~ 0; + Rd_VPR128.4S[0,32] = zext(abs(Rn_VPR128.4S[0,32]) f> abs(Rm_VPR128.4S[0,32])) * eqVal; + Rd_VPR128.4S[32,32] = zext(abs(Rn_VPR128.4S[32,32]) f> abs(Rm_VPR128.4S[32,32])) * eqVal; + Rd_VPR128.4S[64,32] = zext(abs(Rn_VPR128.4S[64,32]) f> abs(Rm_VPR128.4S[64,32])) * eqVal; + Rd_VPR128.4S[96,32] = zext(abs(Rn_VPR128.4S[96,32]) f> abs(Rm_VPR128.4S[96,32])) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd + } # C7.2.48 FACGT page C7-2115 line 123160 MATCH x7ec02c00/mask=xffe0fc00 @@ -3189,7 +3993,11 @@ is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_21=1 & Rm_VPR128.4S & :facgt Rd_FPR16, Rn_FPR16, Rm_FPR16 is b_2131=0b01111110110 & b_1015=0b001011 & Rd_FPR16 & Rn_FPR16 & Rm_FPR16 & Zd { - Rd_FPR16 = NEON_facgt(Rn_FPR16, Rm_FPR16); + local tmp1:1 = abs(Rn_FPR16) f> abs(Rm_FPR16); + local tmp2:2 = zext(tmp1); + local tmp3:2 = ~ 0:2; + Rd_FPR16 = tmp2 * tmp3; + zext_zh(Zd); # zero upper 30 bytes of Zd } # C7.2.48 FACGT page C7-2115 line 123160 MATCH x7ea0ec00/mask=xffa0fc00 @@ -3201,7 +4009,11 @@ is b_2131=0b01111110110 & b_1015=0b001011 & Rd_FPR16 & Rn_FPR16 & Rm_FPR16 & Zd :facgt Rd_FPR32, Rn_FPR32, Rm_FPR32 is b_2331=0b011111101 & b_22=0 & b_21=1 & b_1015=0b111011 & Rd_FPR32 & Rn_FPR32 & Rm_FPR32 & Zd { - Rd_FPR32 = NEON_facgt(Rn_FPR32, Rm_FPR32); + local tmp1:1 = abs(Rn_FPR32) f> abs(Rm_FPR32); + local tmp2:4 = zext(tmp1); + local tmp3:4 = ~ 0:4; + Rd_FPR32 = tmp2 * tmp3; + zext_zs(Zd); # zero upper 28 bytes of Zd } # C7.2.48 FACGT page C7-2115 line 123160 MATCH x7ea0ec00/mask=xffa0fc00 @@ -3213,7 +4025,11 @@ is b_2331=0b011111101 & b_22=0 & b_21=1 & b_1015=0b111011 & Rd_FPR32 & Rn_FPR32 :facgt Rd_FPR64, Rn_FPR64, Rm_FPR64 is b_2331=0b011111101 & b_22=1 & b_21=1 & b_1015=0b111011 & Rd_FPR64 & Rn_FPR64 & Rm_FPR64 & Zd { - Rd_FPR64 = NEON_facgt(Rn_FPR64, Rm_FPR64); + local tmp1:1 = abs(Rn_FPR64) f> abs(Rm_FPR64); + local tmp2:8 = zext(tmp1); + local tmp3:8 = ~ 0:8; + Rd_FPR64 = tmp2 * tmp3; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.48 FACGT page C7-2115 line 123160 MATCH x2ec02c00/mask=xbfe0fc00 @@ -3225,7 +4041,12 @@ is b_2331=0b011111101 & b_22=1 & b_21=1 & b_1015=0b111011 & Rd_FPR64 & Rn_FPR64 :facgt Rd_VPR64.4H, Rn_VPR64.4H, Rm_VPR64.4H is b_31=0 & b_30=0 & b_2129=0b101110110 & b_1015=0b001011 & Rd_VPR64.4H & Rn_VPR64.4H & Rm_VPR64.4H & Zd { - Rd_VPR64.4H = NEON_facgt(Rn_VPR64.4H, Rm_VPR64.4H, 2:1); + local eqVal:2 = ~ 0; + Rd_VPR64.4H[0,16] = zext(abs(Rn_VPR64.4H[0,16]) f> abs(Rm_VPR64.4H[0,16])) * eqVal; + Rd_VPR64.4H[16,16] = zext(abs(Rn_VPR64.4H[16,16]) f> abs(Rm_VPR64.4H[16,16])) * eqVal; + Rd_VPR64.4H[32,16] = zext(abs(Rn_VPR64.4H[32,16]) f> abs(Rm_VPR64.4H[32,16])) * eqVal; + Rd_VPR64.4H[48,16] = zext(abs(Rn_VPR64.4H[48,16]) f> abs(Rm_VPR64.4H[48,16])) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.48 FACGT page C7-2115 line 123160 MATCH x2ec02c00/mask=xbfe0fc00 @@ -3237,7 +4058,16 @@ is b_31=0 & b_30=0 & b_2129=0b101110110 & b_1015=0b001011 & Rd_VPR64.4H & Rn_VPR :facgt Rd_VPR128.8H, Rn_VPR128.8H, Rm_VPR128.8H is b_31=0 & b_30=1 & b_2129=0b101110110 & b_1015=0b001011 & Rd_VPR128.8H & Rn_VPR128.8H & Rm_VPR128.8H & Zd { - Rd_VPR128.8H = NEON_facgt(Rn_VPR128.8H, Rm_VPR128.8H, 2:1); + local eqVal:2 = ~ 0; + Rd_VPR128.8H[0,16] = zext(abs(Rn_VPR128.8H[0,16]) f> abs(Rm_VPR128.8H[0,16])) * eqVal; + Rd_VPR128.8H[16,16] = zext(abs(Rn_VPR128.8H[16,16]) f> abs(Rm_VPR128.8H[16,16])) * eqVal; + Rd_VPR128.8H[32,16] = zext(abs(Rn_VPR128.8H[32,16]) f> abs(Rm_VPR128.8H[32,16])) * eqVal; + Rd_VPR128.8H[48,16] = zext(abs(Rn_VPR128.8H[48,16]) f> abs(Rm_VPR128.8H[48,16])) * eqVal; + Rd_VPR128.8H[64,16] = zext(abs(Rn_VPR128.8H[64,16]) f> abs(Rm_VPR128.8H[64,16])) * eqVal; + Rd_VPR128.8H[80,16] = zext(abs(Rn_VPR128.8H[80,16]) f> abs(Rm_VPR128.8H[80,16])) * eqVal; + Rd_VPR128.8H[96,16] = zext(abs(Rn_VPR128.8H[96,16]) f> abs(Rm_VPR128.8H[96,16])) * eqVal; + Rd_VPR128.8H[112,16] = zext(abs(Rn_VPR128.8H[112,16]) f> abs(Rm_VPR128.8H[112,16])) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.49 FADD (vector) page C7-2119 line 123409 MATCH x0e20d400/mask=xbfa0fc00 @@ -3720,7 +4550,10 @@ is m=0 & b_3030=0 & s=0 & b_2428=0x1e & ftype=3 & b_2121=1 & Rm_FPR16 & CondOp & :fcmeq Rd_VPR128.2D, Rn_VPR128.2D, Rm_VPR128.2D is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_21=1 & Rm_VPR128.2D & b_1115=0x1c & b_1010=1 & Rn_VPR128.2D & Rd_VPR128.2D & Zd { - Rd_VPR128.2D = NEON_fcmeq(Rn_VPR128.2D, Rm_VPR128.2D, 8:1); + local eqVal:8 = ~ 0; + Rd_VPR128.2D[0,64] = zext(Rn_VPR128.2D[0,64] f== Rm_VPR128.2D[0,64]) * eqVal; + Rd_VPR128.2D[64,64] = zext(Rn_VPR128.2D[64,64] f== Rm_VPR128.2D[64,64]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.56 FCMEQ (register) page C7-2133 line 124227 MATCH x0e20e400/mask=xbfa0fc00 @@ -3731,7 +4564,10 @@ is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_21=1 & Rm_VPR128.2D & :fcmeq Rd_VPR64.2S, Rn_VPR64.2S, Rm_VPR64.2S is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_21=1 & Rm_VPR64.2S & b_1115=0x1c & b_1010=1 & Rn_VPR64.2S & Rd_VPR64.2S & Zd { - Rd_VPR64.2S = NEON_fcmeq(Rn_VPR64.2S, Rm_VPR64.2S, 4:1); + local eqVal:4 = ~ 0; + Rd_VPR64.2S[0,32] = zext(Rn_VPR64.2S[0,32] f== Rm_VPR64.2S[0,32]) * eqVal; + Rd_VPR64.2S[32,32] = zext(Rn_VPR64.2S[32,32] f== Rm_VPR64.2S[32,32]) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.56 FCMEQ (register) page C7-2133 line 124227 MATCH x0e20e400/mask=xbfa0fc00 @@ -3742,7 +4578,12 @@ is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_21=1 & Rm_VPR64.2S & :fcmeq Rd_VPR128.4S, Rn_VPR128.4S, Rm_VPR128.4S is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_21=1 & Rm_VPR128.4S & b_1115=0x1c & b_1010=1 & Rn_VPR128.4S & Rd_VPR128.4S & Zd { - Rd_VPR128.4S = NEON_fcmeq(Rn_VPR128.4S, Rm_VPR128.4S, 4:1); + local eqVal:4 = ~ 0; + Rd_VPR128.4S[0,32] = zext(Rn_VPR128.4S[0,32] f== Rm_VPR128.4S[0,32]) * eqVal; + Rd_VPR128.4S[32,32] = zext(Rn_VPR128.4S[32,32] f== Rm_VPR128.4S[32,32]) * eqVal; + Rd_VPR128.4S[64,32] = zext(Rn_VPR128.4S[64,32] f== Rm_VPR128.4S[64,32]) * eqVal; + Rd_VPR128.4S[96,32] = zext(Rn_VPR128.4S[96,32] f== Rm_VPR128.4S[96,32]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.56 FCMEQ (register) page C7-2133 line 124227 MATCH x5e402400/mask=xffe0fc00 @@ -3754,7 +4595,11 @@ is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_21=1 & Rm_VPR128.4S & :fcmeq Rd_FPR16, Rn_FPR16, Rm_FPR16 is b_2131=0b01011110010 & b_1015=0b001001 & Rd_FPR16 & Rn_FPR16 & Rm_FPR16 & Zd { - Rd_FPR16 = NEON_fcmeq(Rn_FPR16, Rm_FPR16); + local tmp1:1 = Rn_FPR16 f== Rm_FPR16; + local tmp2:2 = zext(tmp1); + local tmp3:2 = ~ 0:2; + Rd_FPR16 = tmp2 * tmp3; + zext_zh(Zd); # zero upper 30 bytes of Zd } # C7.2.56 FCMEQ (register) page C7-2133 line 124227 MATCH x5e20e400/mask=xffa0fc00 @@ -3766,7 +4611,11 @@ is b_2131=0b01011110010 & b_1015=0b001001 & Rd_FPR16 & Rn_FPR16 & Rm_FPR16 & Zd :fcmeq Rd_FPR32, Rn_FPR32, Rm_FPR32 is b_2331=0b010111100 & b_22=0 & b_21=1 & b_1015=0b111001 & Rd_FPR32 & Rn_FPR32 & Rm_FPR32 & Zd { - Rd_FPR32 = NEON_fcmeq(Rn_FPR32, Rm_FPR32); + local tmp1:1 = Rn_FPR32 f== Rm_FPR32; + local tmp2:4 = zext(tmp1); + local tmp3:4 = ~ 0:4; + Rd_FPR32 = tmp2 * tmp3; + zext_zs(Zd); # zero upper 28 bytes of Zd } # C7.2.56 FCMEQ (register) page C7-2133 line 124227 MATCH x5e20e400/mask=xffa0fc00 @@ -3778,7 +4627,11 @@ is b_2331=0b010111100 & b_22=0 & b_21=1 & b_1015=0b111001 & Rd_FPR32 & Rn_FPR32 :fcmeq Rd_FPR64, Rn_FPR64, Rm_FPR64 is b_2331=0b010111100 & b_22=1 & b_21=1 & b_1015=0b111001 & Rd_FPR64 & Rn_FPR64 & Rm_FPR64 & Zd { - Rd_FPR64 = NEON_fcmeq(Rn_FPR64, Rm_FPR64); + local tmp1:1 = Rn_FPR64 f== Rm_FPR64; + local tmp2:8 = zext(tmp1); + local tmp3:8 = ~ 0:8; + Rd_FPR64 = tmp2 * tmp3; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.56 FCMEQ (register) page C7-2133 line 124227 MATCH x0e402400/mask=xbfe0fc00 @@ -3790,7 +4643,12 @@ is b_2331=0b010111100 & b_22=1 & b_21=1 & b_1015=0b111001 & Rd_FPR64 & Rn_FPR64 :fcmeq Rd_VPR64.4H, Rn_VPR64.4H, Rm_VPR64.4H is b_31=0 & b_30=0 & b_2129=0b001110010 & b_1015=0b001001 & Rd_VPR64.4H & Rn_VPR64.4H & Rm_VPR64.4H & Zd { - Rd_VPR64.4H = NEON_fcmeq(Rn_VPR64.4H, Rm_VPR64.4H, 2:1); + local eqVal:2 = ~ 0; + Rd_VPR64.4H[0,16] = zext(Rn_VPR64.4H[0,16] f== Rm_VPR64.4H[0,16]) * eqVal; + Rd_VPR64.4H[16,16] = zext(Rn_VPR64.4H[16,16] f== Rm_VPR64.4H[16,16]) * eqVal; + Rd_VPR64.4H[32,16] = zext(Rn_VPR64.4H[32,16] f== Rm_VPR64.4H[32,16]) * eqVal; + Rd_VPR64.4H[48,16] = zext(Rn_VPR64.4H[48,16] f== Rm_VPR64.4H[48,16]) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.56 FCMEQ (register) page C7-2133 line 124227 MATCH x0e402400/mask=xbfe0fc00 @@ -3802,7 +4660,16 @@ is b_31=0 & b_30=0 & b_2129=0b001110010 & b_1015=0b001001 & Rd_VPR64.4H & Rn_VPR :fcmeq Rd_VPR128.8H, Rn_VPR128.8H, Rm_VPR128.8H is b_31=0 & b_30=1 & b_2129=0b001110010 & b_1015=0b001001 & Rd_VPR128.8H & Rn_VPR128.8H & Rm_VPR128.8H & Zd { - Rd_VPR128.8H = NEON_fcmeq(Rn_VPR128.8H, Rm_VPR128.8H, 2:1); + local eqVal:2 = ~ 0; + Rd_VPR128.8H[0,16] = zext(Rn_VPR128.8H[0,16] f== Rm_VPR128.8H[0,16]) * eqVal; + Rd_VPR128.8H[16,16] = zext(Rn_VPR128.8H[16,16] f== Rm_VPR128.8H[16,16]) * eqVal; + Rd_VPR128.8H[32,16] = zext(Rn_VPR128.8H[32,16] f== Rm_VPR128.8H[32,16]) * eqVal; + Rd_VPR128.8H[48,16] = zext(Rn_VPR128.8H[48,16] f== Rm_VPR128.8H[48,16]) * eqVal; + Rd_VPR128.8H[64,16] = zext(Rn_VPR128.8H[64,16] f== Rm_VPR128.8H[64,16]) * eqVal; + Rd_VPR128.8H[80,16] = zext(Rn_VPR128.8H[80,16] f== Rm_VPR128.8H[80,16]) * eqVal; + Rd_VPR128.8H[96,16] = zext(Rn_VPR128.8H[96,16] f== Rm_VPR128.8H[96,16]) * eqVal; + Rd_VPR128.8H[112,16] = zext(Rn_VPR128.8H[112,16] == Rm_VPR128.8H[112,16]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.57 FCMEQ (zero) page C7-2137 line 124475 MATCH x0ea0d800/mask=xbfbffc00 @@ -3810,10 +4677,14 @@ is b_31=0 & b_30=1 & b_2129=0b001110010 & b_1015=0b001001 & Rd_VPR128.8H & Rn_VP # SMACRO(pseudo) ARG1 ARG2 0:8 =NEON_fcmeq/2@8 # AUNIT --inst x4ee0d800/mask=xfffffc00 --rand dfp --status nopcodeop --comment "noflags" -:fcmeq Rd_VPR128.2D, Rn_VPR128.2D, "#0" +:fcmeq Rd_VPR128.2D, Rn_VPR128.2D, "#0.0" is b_3131=0 & q=1 & u=0 & b_2428=0xe & b_23=1 & b_1722=0x30 & b_1216=0xd & b_1011=2 & Rn_VPR128.2D & Rd_VPR128.2D & Zd { - Rd_VPR128.2D = NEON_fcmeq(Rn_VPR128.2D, 0:8, 8:1); + local eqVal:8 = ~ 0; + local zero:8 = 0; + Rd_VPR128.2D[0,64] = zext(Rn_VPR128.2D[0,64] f== zero) * eqVal; + Rd_VPR128.2D[64,64] = zext(Rn_VPR128.2D[64,64] f== zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.57 FCMEQ (zero) page C7-2137 line 124475 MATCH x0ea0d800/mask=xbfbffc00 @@ -3821,10 +4692,14 @@ is b_3131=0 & q=1 & u=0 & b_2428=0xe & b_23=1 & b_1722=0x30 & b_1216=0xd & b_101 # SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_fcmeq/2@4 # AUNIT --inst x0ea0d800/mask=xfffffc00 --rand sfp --status nopcodeop --comment "noflags" -:fcmeq Rd_VPR64.2S, Rn_VPR64.2S, "#0" +:fcmeq Rd_VPR64.2S, Rn_VPR64.2S, "#0.0" is b_3131=0 & q=0 & u=0 & b_2428=0xe & b_23=1 & b_1722=0x10 & b_1216=0xd & b_1011=2 & Rn_VPR64.2S & Rd_VPR64.2S & Zd { - Rd_VPR64.2S = NEON_fcmeq(Rn_VPR64.2S, 0:4, 4:1); + local eqVal:4 = ~ 0; + local zero:4 = 0; + Rd_VPR64.2S[0,32] = zext(Rn_VPR64.2S[0,32] f== zero) * eqVal; + Rd_VPR64.2S[32,32] = zext(Rn_VPR64.2S[32,32] f== zero) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.57 FCMEQ (zero) page C7-2137 line 124475 MATCH x0ea0d800/mask=xbfbffc00 @@ -3832,10 +4707,16 @@ is b_3131=0 & q=0 & u=0 & b_2428=0xe & b_23=1 & b_1722=0x10 & b_1216=0xd & b_101 # SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_fcmeq/2@4 # AUNIT --inst x4ea0d800/mask=xfffffc00 --rand sfp --status nopcodeop --comment "noflags" -:fcmeq Rd_VPR128.4S, Rn_VPR128.4S, "#0" +:fcmeq Rd_VPR128.4S, Rn_VPR128.4S, "#0.0" is b_3131=0 & q=1 & u=0 & b_2428=0xe & b_23=1 & b_1722=0x10 & b_1216=0xd & b_1011=2 & Rn_VPR128.4S & Rd_VPR128.4S & Zd { - Rd_VPR128.4S = NEON_fcmeq(Rn_VPR128.4S, 0:4, 4:1); + local eqVal:4 = ~ 0; + local zero:4 = 0; + Rd_VPR128.4S[0,32] = zext(Rn_VPR128.4S[0,32] f== zero) * eqVal; + Rd_VPR128.4S[32,32] = zext(Rn_VPR128.4S[32,32] f== zero) * eqVal; + Rd_VPR128.4S[64,32] = zext(Rn_VPR128.4S[64,32] f== zero) * eqVal; + Rd_VPR128.4S[96,32] = zext(Rn_VPR128.4S[96,32] f== zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.57 FCMEQ (zero) page C7-2137 line 124475 MATCH x5ef8d800/mask=xfffffc00 @@ -3847,7 +4728,11 @@ is b_3131=0 & q=1 & u=0 & b_2428=0xe & b_23=1 & b_1722=0x10 & b_1216=0xd & b_101 :fcmeq Rd_FPR16, Rn_FPR16, "#0.0" is b_1031=0b0101111011111000110110 & Rd_FPR16 & Rn_FPR16 & Zd { - Rd_FPR16 = NEON_fcmeq(Rn_FPR16, 0:2); + local tmp1:1 = Rn_FPR16 f== 0; + local tmp2:2 = zext(tmp1); + local tmp3:2 = ~ 0:2; + Rd_FPR16 = tmp2 * tmp3; + zext_zh(Zd); # zero upper 30 bytes of Zd } # C7.2.57 FCMEQ (zero) page C7-2137 line 124475 MATCH x5ea0d800/mask=xffbffc00 @@ -3859,7 +4744,11 @@ is b_1031=0b0101111011111000110110 & Rd_FPR16 & Rn_FPR16 & Zd :fcmeq Rd_FPR32, Rn_FPR32, "#0.0" is b_2331=0b010111101 & b_22=0 & b_1021=0b100000110110 & Rd_FPR32 & Rn_FPR32 & Zd { - Rd_FPR32 = NEON_fcmeq(Rn_FPR32, 0:4); + local tmp1:1 = Rn_FPR32 f== 0; + local tmp2:4 = zext(tmp1); + local tmp3:4 = ~ 0:4; + Rd_FPR32 = tmp2 * tmp3; + zext_zs(Zd); # zero upper 28 bytes of Zd } # C7.2.57 FCMEQ (zero) page C7-2137 line 124475 MATCH x5ea0d800/mask=xffbffc00 @@ -3871,7 +4760,11 @@ is b_2331=0b010111101 & b_22=0 & b_1021=0b100000110110 & Rd_FPR32 & Rn_FPR32 & Z :fcmeq Rd_FPR64, Rn_FPR64, "#0.0" is b_2331=0b010111101 & b_22=1 & b_1021=0b100000110110 & Rd_FPR64 & Rn_FPR64 & Zd { - Rd_FPR64 = NEON_fcmeq(Rn_FPR64, 0:8); + local tmp1:1 = Rn_FPR64 f== 0; + local tmp2:8 = zext(tmp1); + local tmp3:8 = ~ 0:8; + Rd_FPR64 = tmp2 * tmp3; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.57 FCMEQ (zero) page C7-2137 line 124475 MATCH x0ef8d800/mask=xbffffc00 @@ -3883,7 +4776,13 @@ is b_2331=0b010111101 & b_22=1 & b_1021=0b100000110110 & Rd_FPR64 & Rn_FPR64 & Z :fcmeq Rd_VPR64.4H, Rn_VPR64.4H, "#0.0" is b_31=0 & b_30=0 & b_1029=0b00111011111000110110 & Rd_VPR64.4H & Rn_VPR64.4H & Zd { - Rd_VPR64.4H = NEON_fcmeq(Rn_VPR64.4H, 0:2, 2:1); + local eqVal:2 = ~ 0; + local zero:2 = 0; + Rd_VPR64.4H[0,16] = zext(Rn_VPR64.4H[0,16] f== zero) * eqVal; + Rd_VPR64.4H[16,16] = zext(Rn_VPR64.4H[16,16] f== zero) * eqVal; + Rd_VPR64.4H[32,16] = zext(Rn_VPR64.4H[32,16] f== zero) * eqVal; + Rd_VPR64.4H[48,16] = zext(Rn_VPR64.4H[48,16] f== zero) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.57 FCMEQ (zero) page C7-2137 line 124475 MATCH x0ef8d800/mask=xbffffc00 @@ -3895,7 +4794,17 @@ is b_31=0 & b_30=0 & b_1029=0b00111011111000110110 & Rd_VPR64.4H & Rn_VPR64.4H & :fcmeq Rd_VPR128.8H, Rn_VPR128.8H, "#0.0" is b_31=0 & b_30=1 & b_1029=0b00111011111000110110 & Rd_VPR128.8H & Rn_VPR128.8H & Zd { - Rd_VPR128.8H = NEON_fcmeq(Rn_VPR128.8H, 0:2, 2:1); + local eqVal:2 = ~ 0; + local zero:2 = 0; + Rd_VPR128.8H[0,16] = zext(Rn_VPR128.8H[0,16] f== zero) * eqVal; + Rd_VPR128.8H[16,16] = zext(Rn_VPR128.8H[16,16] f== zero) * eqVal; + Rd_VPR128.8H[32,16] = zext(Rn_VPR128.8H[32,16] f== zero) * eqVal; + Rd_VPR128.8H[48,16] = zext(Rn_VPR128.8H[48,16] f== zero) * eqVal; + Rd_VPR128.8H[64,16] = zext(Rn_VPR128.8H[64,16] f== zero) * eqVal; + Rd_VPR128.8H[80,16] = zext(Rn_VPR128.8H[80,16] f== zero) * eqVal; + Rd_VPR128.8H[96,16] = zext(Rn_VPR128.8H[96,16] f== zero) * eqVal; + Rd_VPR128.8H[112,16] = zext(Rn_VPR128.8H[112,16] f== zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.58 FCMGE (register) page C7-2140 line 124691 MATCH x2e20e400/mask=xbfa0fc00 @@ -3906,7 +4815,10 @@ is b_31=0 & b_30=1 & b_1029=0b00111011111000110110 & Rd_VPR128.8H & Rn_VPR128.8H :fcmge Rd_VPR128.2D, Rn_VPR128.2D, Rm_VPR128.2D is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_21=1 & Rm_VPR128.2D & b_1115=0x1c & b_1010=1 & Rn_VPR128.2D & Rd_VPR128.2D & Zd { - Rd_VPR128.2D = NEON_fcmge(Rn_VPR128.2D, Rm_VPR128.2D, 8:1); + local eqVal:8 = ~ 0; + Rd_VPR128.2D[0,64] = zext(Rn_VPR128.2D[0,64] f>= Rm_VPR128.2D[0,64]) * eqVal; + Rd_VPR128.2D[64,64] = zext(Rn_VPR128.2D[64,64] f>= Rm_VPR128.2D[64,64]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.58 FCMGE (register) page C7-2140 line 124691 MATCH x2e20e400/mask=xbfa0fc00 @@ -3917,7 +4829,10 @@ is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_21=1 & Rm_VPR128.2D & :fcmge Rd_VPR64.2S, Rn_VPR64.2S, Rm_VPR64.2S is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_21=1 & Rm_VPR64.2S & b_1115=0x1c & b_1010=1 & Rn_VPR64.2S & Rd_VPR64.2S & Zd { - Rd_VPR64.2S = NEON_fcmge(Rn_VPR64.2S, Rm_VPR64.2S, 4:1); + local eqVal:4 = ~ 0; + Rd_VPR64.2S[0,32] = zext(Rn_VPR64.2S[0,32] f>= Rm_VPR64.2S[0,32]) * eqVal; + Rd_VPR64.2S[32,32] = zext(Rn_VPR64.2S[32,32] f>= Rm_VPR64.2S[32,32]) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.58 FCMGE (register) page C7-2140 line 124691 MATCH x2e20e400/mask=xbfa0fc00 @@ -3928,7 +4843,12 @@ is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_21=1 & Rm_VPR64.2S & :fcmge Rd_VPR128.4S, Rn_VPR128.4S, Rm_VPR128.4S is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_21=1 & Rm_VPR128.4S & b_1115=0x1c & b_1010=1 & Rn_VPR128.4S & Rd_VPR128.4S & Zd { - Rd_VPR128.4S = NEON_fcmge(Rn_VPR128.4S, Rm_VPR128.4S, 4:1); + local eqVal:4 = ~ 0; + Rd_VPR128.4S[0,32] = zext(Rn_VPR128.4S[0,32] f>= Rm_VPR128.4S[0,32]) * eqVal; + Rd_VPR128.4S[32,32] = zext(Rn_VPR128.4S[32,32] f>= Rm_VPR128.4S[32,32]) * eqVal; + Rd_VPR128.4S[64,32] = zext(Rn_VPR128.4S[64,32] f>= Rm_VPR128.4S[64,32]) * eqVal; + Rd_VPR128.4S[96,32] = zext(Rn_VPR128.4S[96,32] f>= Rm_VPR128.4S[96,32]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.58 FCMGE (register) page C7-2140 line 124691 MATCH x7e402400/mask=xffe0fc00 @@ -3940,7 +4860,11 @@ is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_21=1 & Rm_VPR128.4S & :fcmge Rd_FPR16, Rn_FPR16, Rm_FPR16 is b_2131=0b01111110010 & b_1015=0b001001 & Rd_FPR16 & Rn_FPR16 & Rm_FPR16 & Zd { - Rd_FPR16 = NEON_fcmge(Rn_FPR16, Rm_FPR16); + local tmp1:1 = Rn_FPR16 f>= Rm_FPR16; + local tmp2:2 = zext(tmp1); + local tmp3:2 = ~ 0:2; + Rd_FPR16 = tmp2 * tmp3; + zext_zh(Zd); # zero upper 30 bytes of Zd } # C7.2.58 FCMGE (register) page C7-2140 line 124691 MATCH x7e20e400/mask=xffa0fc00 @@ -3952,7 +4876,11 @@ is b_2131=0b01111110010 & b_1015=0b001001 & Rd_FPR16 & Rn_FPR16 & Rm_FPR16 & Zd :fcmge Rd_FPR32, Rn_FPR32, Rm_FPR32 is b_2331=0b011111100 & b_22=0 & b_21=1 & b_1015=0b111001 & Rd_FPR32 & Rn_FPR32 & Rm_FPR32 & Zd { - Rd_FPR32 = NEON_fcmge(Rn_FPR32, Rm_FPR32); + local tmp1:1 = Rn_FPR32 f>= Rm_FPR32; + local tmp2:4 = zext(tmp1); + local tmp3:4 = ~ 0:4; + Rd_FPR32 = tmp2 * tmp3; + zext_zs(Zd); # zero upper 28 bytes of Zd } # C7.2.58 FCMGE (register) page C7-2140 line 124691 MATCH x7e20e400/mask=xffa0fc00 @@ -3964,7 +4892,11 @@ is b_2331=0b011111100 & b_22=0 & b_21=1 & b_1015=0b111001 & Rd_FPR32 & Rn_FPR32 :fcmge Rd_FPR64, Rn_FPR64, Rm_FPR64 is b_2331=0b011111100 & b_22=1 & b_21=1 & b_1015=0b111001 & Rd_FPR64 & Rn_FPR64 & Rm_FPR64 & Zd { - Rd_FPR64 = NEON_fcmge(Rn_FPR64, Rm_FPR64); + local tmp1:1 = Rn_FPR64 f>= Rm_FPR64; + local tmp2:8 = zext(tmp1); + local tmp3:8 = ~ 0:8; + Rd_FPR64 = tmp2 * tmp3; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.58 FCMGE (register) page C7-2140 line 124691 MATCH x2e402400/mask=xbfe0fc00 @@ -3976,7 +4908,12 @@ is b_2331=0b011111100 & b_22=1 & b_21=1 & b_1015=0b111001 & Rd_FPR64 & Rn_FPR64 :fcmge Rd_VPR64.4H, Rn_VPR64.4H, Rm_VPR64.4H is b_31=0 & b_30=0 & b_2129=0b101110010 & b_1015=0b001001 & Rd_VPR64.4H & Rn_VPR64.4H & Rm_VPR64.4H & Zd { - Rd_VPR64.4H = NEON_fcmge(Rn_VPR64.4H, Rm_VPR64.4H, 2:1); + local eqVal:2 = ~ 0; + Rd_VPR64.4H[0,16] = zext(Rn_VPR64.4H[0,16] f>= Rm_VPR64.4H[0,16]) * eqVal; + Rd_VPR64.4H[16,16] = zext(Rn_VPR64.4H[16,16] f>= Rm_VPR64.4H[16,16]) * eqVal; + Rd_VPR64.4H[32,16] = zext(Rn_VPR64.4H[32,16] f>= Rm_VPR64.4H[32,16]) * eqVal; + Rd_VPR64.4H[48,16] = zext(Rn_VPR64.4H[48,16] f>= Rm_VPR64.4H[48,16]) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.58 FCMGE (register) page C7-2140 line 124691 MATCH x2e402400/mask=xbfe0fc00 @@ -3988,7 +4925,16 @@ is b_31=0 & b_30=0 & b_2129=0b101110010 & b_1015=0b001001 & Rd_VPR64.4H & Rn_VPR :fcmge Rd_VPR128.8H, Rn_VPR128.8H, Rm_VPR128.8H is b_31=0 & b_30=1 & b_2129=0b101110010 & b_1015=0b001001 & Rd_VPR128.8H & Rn_VPR128.8H & Rm_VPR128.8H & Zd { - Rd_VPR128.8H = NEON_fcmge(Rn_VPR128.8H, Rm_VPR128.8H, 2:1); + local eqVal:2 = ~ 0; + Rd_VPR128.8H[0,16] = zext(Rn_VPR128.8H[0,16] f>= Rm_VPR128.8H[0,16]) * eqVal; + Rd_VPR128.8H[16,16] = zext(Rn_VPR128.8H[16,16] f>= Rm_VPR128.8H[16,16]) * eqVal; + Rd_VPR128.8H[32,16] = zext(Rn_VPR128.8H[32,16] f>= Rm_VPR128.8H[32,16]) * eqVal; + Rd_VPR128.8H[48,16] = zext(Rn_VPR128.8H[48,16] f>= Rm_VPR128.8H[48,16]) * eqVal; + Rd_VPR128.8H[64,16] = zext(Rn_VPR128.8H[64,16] f>= Rm_VPR128.8H[64,16]) * eqVal; + Rd_VPR128.8H[80,16] = zext(Rn_VPR128.8H[80,16] f>= Rm_VPR128.8H[80,16]) * eqVal; + Rd_VPR128.8H[96,16] = zext(Rn_VPR128.8H[96,16] f>= Rm_VPR128.8H[96,16]) * eqVal; + Rd_VPR128.8H[112,16] = zext(Rn_VPR128.8H[112,16] f>= Rm_VPR128.8H[112,16]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.59 FCMGE (zero) page C7-2144 line 124940 MATCH x2ea0c800/mask=xbfbffc00 @@ -3996,10 +4942,14 @@ is b_31=0 & b_30=1 & b_2129=0b101110010 & b_1015=0b001001 & Rd_VPR128.8H & Rn_VP # SMACRO(pseudo) ARG1 ARG2 0:8 =NEON_fcmge/2@8 # AUNIT --inst x6ee0c800/mask=xfffffc00 --rand dfp --status nopcodeop --comment "noflags" -:fcmge Rd_VPR128.2D, Rn_VPR128.2D, "#0" +:fcmge Rd_VPR128.2D, Rn_VPR128.2D, "#0.0" is b_3131=0 & q=1 & u=1 & b_2428=0xe & b_23=1 & b_1722=0x30 & b_1216=0xc & b_1011=2 & Rn_VPR128.2D & Rd_VPR128.2D & Zd { - Rd_VPR128.2D = NEON_fcmge(Rn_VPR128.2D, 0:8, 8:1); + local eqVal:8 = ~ 0; + local zero:8 = 0; + Rd_VPR128.2D[0,64] = zext(Rn_VPR128.2D[0,64] f>= zero) * eqVal; + Rd_VPR128.2D[64,64] = zext(Rn_VPR128.2D[64,64] f>= zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.59 FCMGE (zero) page C7-2144 line 124940 MATCH x2ea0c800/mask=xbfbffc00 @@ -4007,10 +4957,14 @@ is b_3131=0 & q=1 & u=1 & b_2428=0xe & b_23=1 & b_1722=0x30 & b_1216=0xc & b_101 # SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_fcmge/2@4 # AUNIT --inst x2ea0c800/mask=xfffffc00 --rand sfp --status nopcodeop --comment "noflags" -:fcmge Rd_VPR64.2S, Rn_VPR64.2S, "#0" +:fcmge Rd_VPR64.2S, Rn_VPR64.2S, "#0.0" is b_3131=0 & q=0 & u=1 & b_2428=0xe & b_23=1 & b_1722=0x10 & b_1216=0xc & b_1011=2 & Rn_VPR64.2S & Rd_VPR64.2S & Zd { - Rd_VPR64.2S = NEON_fcmge(Rn_VPR64.2S, 0:4, 4:1); + local eqVal:4 = ~ 0; + local zero:4 = 0; + Rd_VPR64.2S[0,32] = zext(Rn_VPR64.2S[0,32] f>= zero) * eqVal; + Rd_VPR64.2S[32,32] = zext(Rn_VPR64.2S[32,32] f>= zero) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.59 FCMGE (zero) page C7-2144 line 124940 MATCH x2ea0c800/mask=xbfbffc00 @@ -4018,10 +4972,16 @@ is b_3131=0 & q=0 & u=1 & b_2428=0xe & b_23=1 & b_1722=0x10 & b_1216=0xc & b_101 # SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_fcmge/2@4 # AUNIT --inst x6ea0c800/mask=xfffffc00 --rand sfp --status nopcodeop --comment "noflags" -:fcmge Rd_VPR128.4S, Rn_VPR128.4S, "#0" +:fcmge Rd_VPR128.4S, Rn_VPR128.4S, "#0.0" is b_3131=0 & q=1 & u=1 & b_2428=0xe & b_23=1 & b_1722=0x10 & b_1216=0xc & b_1011=2 & Rn_VPR128.4S & Rd_VPR128.4S & Zd { - Rd_VPR128.4S = NEON_fcmge(Rn_VPR128.4S, 0:4, 4:1); + local eqVal:4 = ~ 0; + local zero:4 = 0; + Rd_VPR128.4S[0,32] = zext(Rn_VPR128.4S[0,32] f>= zero) * eqVal; + Rd_VPR128.4S[32,32] = zext(Rn_VPR128.4S[32,32] f>= zero) * eqVal; + Rd_VPR128.4S[64,32] = zext(Rn_VPR128.4S[64,32] f>= zero) * eqVal; + Rd_VPR128.4S[96,32] = zext(Rn_VPR128.4S[96,32] f>= zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.59 FCMGE (zero) page C7-2144 line 124940 MATCH x7ef8c800/mask=xfffffc00 @@ -4033,7 +4993,11 @@ is b_3131=0 & q=1 & u=1 & b_2428=0xe & b_23=1 & b_1722=0x10 & b_1216=0xc & b_101 :fcmge Rd_FPR16, Rn_FPR16, "#0.0" is b_1031=0b0111111011111000110010 & Rd_FPR16 & Rn_FPR16 & Zd { - Rd_FPR16 = NEON_fcmge(Rn_FPR16, 0:2); + local tmp1:1 = Rn_FPR16 f>= 0; + local tmp2:2 = zext(tmp1); + local tmp3:2 = ~ 0:2; + Rd_FPR16 = tmp2 * tmp3; + zext_zh(Zd); # zero upper 30 bytes of Zd } # C7.2.59 FCMGE (zero) page C7-2144 line 124940 MATCH x7ea0c800/mask=xffbffc00 @@ -4045,7 +5009,11 @@ is b_1031=0b0111111011111000110010 & Rd_FPR16 & Rn_FPR16 & Zd :fcmge Rd_FPR32, Rn_FPR32, "#0.0" is b_2331=0b011111101 & b_22=0 & b_1021=0b100000110010 & Rd_FPR32 & Rn_FPR32 & Zd { - Rd_FPR32 = NEON_fcmge(Rn_FPR32, 0:4); + local tmp1:1 = Rn_FPR32 f>= 0; + local tmp2:4 = zext(tmp1); + local tmp3:4 = ~ 0:4; + Rd_FPR32 = tmp2 * tmp3; + zext_zs(Zd); # zero upper 28 bytes of Zd } # C7.2.59 FCMGE (zero) page C7-2144 line 124940 MATCH x7ea0c800/mask=xffbffc00 @@ -4057,7 +5025,11 @@ is b_2331=0b011111101 & b_22=0 & b_1021=0b100000110010 & Rd_FPR32 & Rn_FPR32 & Z :fcmge Rd_FPR64, Rn_FPR64, "#0.0" is b_2331=0b011111101 & b_22=1 & b_1021=0b100000110010 & Rd_FPR64 & Rn_FPR64 & Zd { - Rd_FPR64 = NEON_fcmge(Rn_FPR64, 0:8); + local tmp1:1 = Rn_FPR64 f>= 0; + local tmp2:8 = zext(tmp1); + local tmp3:8 = ~ 0:8; + Rd_FPR64 = tmp2 * tmp3; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.59 FCMGE (zero) page C7-2144 line 124940 MATCH x2ef8c800/mask=xbffffc00 @@ -4069,7 +5041,13 @@ is b_2331=0b011111101 & b_22=1 & b_1021=0b100000110010 & Rd_FPR64 & Rn_FPR64 & Z :fcmge Rd_VPR64.4H, Rn_VPR64.4H, "#0.0" is b_31=0 & b_30=0 & b_1029=0b10111011111000110010 & Rd_VPR64.4H & Rn_VPR64.4H & Zd { - Rd_VPR64.4H = NEON_fcmge(Rn_VPR64.4H, 0:2, 2:1); + local eqVal:2 = ~ 0; + local zero:2 = 0; + Rd_VPR64.4H[0,16] = zext(Rn_VPR64.4H[0,16] f>= zero) * eqVal; + Rd_VPR64.4H[16,16] = zext(Rn_VPR64.4H[16,16] f>= zero) * eqVal; + Rd_VPR64.4H[32,16] = zext(Rn_VPR64.4H[32,16] f>= zero) * eqVal; + Rd_VPR64.4H[48,16] = zext(Rn_VPR64.4H[48,16] f>= zero) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.59 FCMGE (zero) page C7-2144 line 124940 MATCH x2ef8c800/mask=xbffffc00 @@ -4081,7 +5059,17 @@ is b_31=0 & b_30=0 & b_1029=0b10111011111000110010 & Rd_VPR64.4H & Rn_VPR64.4H & :fcmge Rd_VPR128.8H, Rn_VPR128.8H, "#0.0" is b_31=0 & b_30=1 & b_1029=0b10111011111000110010 & Rd_VPR128.8H & Rn_VPR128.8H & Zd { - Rd_VPR128.8H = NEON_fcmge(Rn_VPR128.8H, 0:2, 2:1); + local eqVal:2 = ~ 0; + local zero:2 = 0; + Rd_VPR128.8H[0,16] = zext(Rn_VPR128.8H[0,16] f>= zero) * eqVal; + Rd_VPR128.8H[16,16] = zext(Rn_VPR128.8H[16,16] f>= zero) * eqVal; + Rd_VPR128.8H[32,16] = zext(Rn_VPR128.8H[32,16] f>= zero) * eqVal; + Rd_VPR128.8H[48,16] = zext(Rn_VPR128.8H[48,16] f>= zero) * eqVal; + Rd_VPR128.8H[64,16] = zext(Rn_VPR128.8H[64,16] f>= zero) * eqVal; + Rd_VPR128.8H[80,16] = zext(Rn_VPR128.8H[80,16] f>= zero) * eqVal; + Rd_VPR128.8H[96,16] = zext(Rn_VPR128.8H[96,16] f>= zero) * eqVal; + Rd_VPR128.8H[112,16] = zext(Rn_VPR128.8H[112,16] f>= zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.60 FCMGT (register) page C7-2147 line 125156 MATCH x2ea0e400/mask=xbfa0fc00 @@ -4092,7 +5080,10 @@ is b_31=0 & b_30=1 & b_1029=0b10111011111000110010 & Rd_VPR128.8H & Rn_VPR128.8H :fcmgt Rd_VPR128.2D, Rn_VPR128.2D, Rm_VPR128.2D is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=3 & b_21=1 & Rm_VPR128.2D & b_1115=0x1c & b_1010=1 & Rn_VPR128.2D & Rd_VPR128.2D & Zd { - Rd_VPR128.2D = NEON_fcmgt(Rn_VPR128.2D, Rm_VPR128.2D, 8:1); + local eqVal:8 = ~ 0; + Rd_VPR128.2D[0,64] = zext(Rn_VPR128.2D[0,64] f> Rm_VPR128.2D[0,64]) * eqVal; + Rd_VPR128.2D[64,64] = zext(Rn_VPR128.2D[64,64] f> Rm_VPR128.2D[64,64]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.60 FCMGT (register) page C7-2147 line 125156 MATCH x2ea0e400/mask=xbfa0fc00 @@ -4103,7 +5094,10 @@ is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=3 & b_21=1 & Rm_VPR128.2D & :fcmgt Rd_VPR64.2S, Rn_VPR64.2S, Rm_VPR64.2S is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_21=1 & Rm_VPR64.2S & b_1115=0x1c & b_1010=1 & Rn_VPR64.2S & Rd_VPR64.2S & Zd { - Rd_VPR64.2S = NEON_fcmgt(Rn_VPR64.2S, Rm_VPR64.2S, 4:1); + local eqVal:4 = ~ 0; + Rd_VPR64.2S[0,32] = zext(Rn_VPR64.2S[0,32] f> Rm_VPR64.2S[0,32]) * eqVal; + Rd_VPR64.2S[32,32] = zext(Rn_VPR64.2S[32,32] f> Rm_VPR64.2S[32,32]) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.60 FCMGT (register) page C7-2147 line 125156 MATCH x2ea0e400/mask=xbfa0fc00 @@ -4114,7 +5108,12 @@ is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_21=1 & Rm_VPR64.2S & :fcmgt Rd_VPR128.4S, Rn_VPR128.4S, Rm_VPR128.4S is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_21=1 & Rm_VPR128.4S & b_1115=0x1c & b_1010=1 & Rn_VPR128.4S & Rd_VPR128.4S & Zd { - Rd_VPR128.4S = NEON_fcmgt(Rn_VPR128.4S, Rm_VPR128.4S, 4:1); + local eqVal:4 = ~ 0; + Rd_VPR128.4S[0,32] = zext(Rn_VPR128.4S[0,32] f> Rm_VPR128.4S[0,32]) * eqVal; + Rd_VPR128.4S[32,32] = zext(Rn_VPR128.4S[32,32] f> Rm_VPR128.4S[32,32]) * eqVal; + Rd_VPR128.4S[64,32] = zext(Rn_VPR128.4S[64,32] f> Rm_VPR128.4S[64,32]) * eqVal; + Rd_VPR128.4S[96,32] = zext(Rn_VPR128.4S[96,32] f> Rm_VPR128.4S[96,32]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.60 FCMGT (register) page C7-2147 line 125156 MATCH x7ec02400/mask=xffe0fc00 @@ -4126,7 +5125,11 @@ is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_21=1 & Rm_VPR128.4S & :fcmgt Rd_FPR16, Rn_FPR16, Rm_FPR16 is b_2131=0b01111110110 & b_1015=0b001001 & Rd_FPR16 & Rn_FPR16 & Rm_FPR16 & Zd { - Rd_FPR16 = NEON_fcmgt(Rn_FPR16, Rm_FPR16); + local tmp1:1 = Rn_FPR16 f> Rm_FPR16; + local tmp2:2 = zext(tmp1); + local tmp3:2 = ~ 0:2; + Rd_FPR16 = tmp2 * tmp3; + zext_zh(Zd); # zero upper 30 bytes of Zd } # C7.2.60 FCMGT (register) page C7-2147 line 125156 MATCH x7ea0e400/mask=xffa0fc00 @@ -4138,7 +5141,11 @@ is b_2131=0b01111110110 & b_1015=0b001001 & Rd_FPR16 & Rn_FPR16 & Rm_FPR16 & Zd :fcmgt Rd_FPR32, Rn_FPR32, Rm_FPR32 is b_2331=0b011111101 & b_22=0 & b_21=1 & b_1015=0b111001 & Rd_FPR32 & Rn_FPR32 & Rm_FPR32 & Zd { - Rd_FPR32 = NEON_fcmgt(Rn_FPR32, Rm_FPR32); + local tmp1:1 = Rn_FPR32 f> Rm_FPR32; + local tmp2:4 = zext(tmp1); + local tmp3:4 = ~ 0:4; + Rd_FPR32 = tmp2 * tmp3; + zext_zs(Zd); # zero upper 28 bytes of Zd } # C7.2.60 FCMGT (register) page C7-2147 line 125156 MATCH x7ea0e400/mask=xffa0fc00 @@ -4150,7 +5157,11 @@ is b_2331=0b011111101 & b_22=0 & b_21=1 & b_1015=0b111001 & Rd_FPR32 & Rn_FPR32 :fcmgt Rd_FPR64, Rn_FPR64, Rm_FPR64 is b_2331=0b011111101 & b_22=1 & b_21=1 & b_1015=0b111001 & Rd_FPR64 & Rn_FPR64 & Rm_FPR64 & Zd { - Rd_FPR64 = NEON_fcmgt(Rn_FPR64, Rm_FPR64); + local tmp1:1 = Rn_FPR64 f> Rm_FPR64; + local tmp2:8 = zext(tmp1); + local tmp3:8 = ~ 0:8; + Rd_FPR64 = tmp2 * tmp3; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.60 FCMGT (register) page C7-2147 line 125156 MATCH x2ec02400/mask=xbfe0fc00 @@ -4162,7 +5173,12 @@ is b_2331=0b011111101 & b_22=1 & b_21=1 & b_1015=0b111001 & Rd_FPR64 & Rn_FPR64 :fcmgt Rd_VPR64.4H, Rn_VPR64.4H, Rm_VPR64.4H is b_31=0 & b_30=0 & b_2129=0b101110110 & b_1015=0b001001 & Rd_VPR64.4H & Rn_VPR64.4H & Rm_VPR64.4H & Zd { - Rd_VPR64.4H = NEON_fcmgt(Rn_VPR64.4H, Rm_VPR64.4H, 2:1); + local eqVal:2 = ~ 0; + Rd_VPR64.4H[0,16] = zext(Rn_VPR64.4H[0,16] f> Rm_VPR64.4H[0,16]) * eqVal; + Rd_VPR64.4H[16,16] = zext(Rn_VPR64.4H[16,16] f> Rm_VPR64.4H[16,16]) * eqVal; + Rd_VPR64.4H[32,16] = zext(Rn_VPR64.4H[32,16] f> Rm_VPR64.4H[32,16]) * eqVal; + Rd_VPR64.4H[48,16] = zext(Rn_VPR64.4H[48,16] f> Rm_VPR64.4H[48,16]) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.60 FCMGT (register) page C7-2147 line 125156 MATCH x2ec02400/mask=xbfe0fc00 @@ -4174,7 +5190,16 @@ is b_31=0 & b_30=0 & b_2129=0b101110110 & b_1015=0b001001 & Rd_VPR64.4H & Rn_VPR :fcmgt Rd_VPR128.8H, Rn_VPR128.8H, Rm_VPR128.8H is b_31=0 & b_30=1 & b_2129=0b101110110 & b_1015=0b001001 & Rd_VPR128.8H & Rn_VPR128.8H & Rm_VPR128.8H & Zd { - Rd_VPR128.8H = NEON_fcmgt(Rn_VPR128.8H, Rm_VPR128.8H, 2:1); + local eqVal:2 = ~ 0; + Rd_VPR128.8H[0,16] = zext(Rn_VPR128.8H[0,16] f> Rm_VPR128.8H[0,16]) * eqVal; + Rd_VPR128.8H[16,16] = zext(Rn_VPR128.8H[16,16] f> Rm_VPR128.8H[16,16]) * eqVal; + Rd_VPR128.8H[32,16] = zext(Rn_VPR128.8H[32,16] f> Rm_VPR128.8H[32,16]) * eqVal; + Rd_VPR128.8H[48,16] = zext(Rn_VPR128.8H[48,16] f> Rm_VPR128.8H[48,16]) * eqVal; + Rd_VPR128.8H[64,16] = zext(Rn_VPR128.8H[64,16] f> Rm_VPR128.8H[64,16]) * eqVal; + Rd_VPR128.8H[80,16] = zext(Rn_VPR128.8H[80,16] f> Rm_VPR128.8H[80,16]) * eqVal; + Rd_VPR128.8H[96,16] = zext(Rn_VPR128.8H[96,16] f> Rm_VPR128.8H[96,16]) * eqVal; + Rd_VPR128.8H[112,16] = zext(Rn_VPR128.8H[112,16] f> Rm_VPR128.8H[112,16]) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.61 FCMGT (zero) page C7-2151 line 125404 MATCH x0ea0c800/mask=xbfbffc00 @@ -4182,10 +5207,14 @@ is b_31=0 & b_30=1 & b_2129=0b101110110 & b_1015=0b001001 & Rd_VPR128.8H & Rn_VP # SMACRO(pseudo) ARG1 ARG2 0:8 =NEON_fcmgt/2@8 # AUNIT --inst x4ee0c800/mask=xfffffc00 --rand dfp --status nopcodeop --comment "noflags" -:fcmgt Rd_VPR128.2D, Rn_VPR128.2D, "#0" +:fcmgt Rd_VPR128.2D, Rn_VPR128.2D, "#0.0" is b_3131=0 & q=1 & u=0 & b_2428=0xe & b_23=1 & b_1722=0x30 & b_1216=0xc & b_1011=2 & Rn_VPR128.2D & Rd_VPR128.2D & Zd { - Rd_VPR128.2D = NEON_fcmgt(Rn_VPR128.2D, 0:8, 8:1); + local eqVal:8 = ~ 0; + local zero:8 = 0; + Rd_VPR128.2D[0,64] = zext(Rn_VPR128.2D[0,64] f> zero) * eqVal; + Rd_VPR128.2D[64,64] = zext(Rn_VPR128.2D[64,64] f> zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.61 FCMGT (zero) page C7-2151 line 125404 MATCH x0ea0c800/mask=xbfbffc00 @@ -4193,10 +5222,14 @@ is b_3131=0 & q=1 & u=0 & b_2428=0xe & b_23=1 & b_1722=0x30 & b_1216=0xc & b_101 # SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_fcmgt/2@4 # AUNIT --inst x0ea0c800/mask=xfffffc00 --rand sfp --status nopcodeop --comment "noflags" -:fcmgt Rd_VPR64.2S, Rn_VPR64.2S, "#0" +:fcmgt Rd_VPR64.2S, Rn_VPR64.2S, "#0.0" is b_3131=0 & q=0 & u=0 & b_2428=0xe & b_23=1 & b_1722=0x10 & b_1216=0xc & b_1011=2 & Rn_VPR64.2S & Rd_VPR64.2S & Zd { - Rd_VPR64.2S = NEON_fcmgt(Rn_VPR64.2S, 0:4, 4:1); + local eqVal:4 = ~ 0; + local zero:4 = 0; + Rd_VPR64.2S[0,32] = zext(Rn_VPR64.2S[0,32] f> zero) * eqVal; + Rd_VPR64.2S[32,32] = zext(Rn_VPR64.2S[32,32] f> zero) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.61 FCMGT (zero) page C7-2151 line 125404 MATCH x0ea0c800/mask=xbfbffc00 @@ -4204,10 +5237,16 @@ is b_3131=0 & q=0 & u=0 & b_2428=0xe & b_23=1 & b_1722=0x10 & b_1216=0xc & b_101 # SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_fcmgt/2@4 # AUNIT --inst x4ea0c800/mask=xfffffc00 --rand sfp --status nopcodeop --comment "noflags" -:fcmgt Rd_VPR128.4S, Rn_VPR128.4S, "#0" +:fcmgt Rd_VPR128.4S, Rn_VPR128.4S, "#0.0" is b_3131=0 & q=1 & u=0 & b_2428=0xe & b_23=1 & b_1722=0x10 & b_1216=0xc & b_1011=2 & Rn_VPR128.4S & Rd_VPR128.4S & Zd { - Rd_VPR128.4S = NEON_fcmgt(Rn_VPR128.4S, 0:4, 4:1); + local eqVal:4 = ~ 0; + local zero:4 = 0; + Rd_VPR128.4S[0,32] = zext(Rn_VPR128.4S[0,32] f> zero) * eqVal; + Rd_VPR128.4S[32,32] = zext(Rn_VPR128.4S[32,32] f> zero) * eqVal; + Rd_VPR128.4S[64,32] = zext(Rn_VPR128.4S[64,32] f> zero) * eqVal; + Rd_VPR128.4S[96,32] = zext(Rn_VPR128.4S[96,32] f> zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.61 FCMGT (zero) page C7-2151 line 125404 MATCH x5ef8c800/mask=xfffffc00 @@ -4219,7 +5258,11 @@ is b_3131=0 & q=1 & u=0 & b_2428=0xe & b_23=1 & b_1722=0x10 & b_1216=0xc & b_101 :fcmgt Rd_FPR16, Rn_FPR16, "#0.0" is b_1031=0b0101111011111000110010 & Rd_FPR16 & Rn_FPR16 & Zd { - Rd_FPR16 = NEON_fcmgt(Rn_FPR16, 0:2); + local tmp1:1 = Rn_FPR16 f> 0; + local tmp2:2 = zext(tmp1); + local tmp3:2 = ~ 0:2; + Rd_FPR16 = tmp2 * tmp3; + zext_zh(Zd); # zero upper 30 bytes of Zd } # C7.2.61 FCMGT (zero) page C7-2151 line 125404 MATCH x5ea0c800/mask=xffbffc00 @@ -4231,7 +5274,11 @@ is b_1031=0b0101111011111000110010 & Rd_FPR16 & Rn_FPR16 & Zd :fcmgt Rd_FPR32, Rn_FPR32, "#0.0" is b_2331=0b010111101 & b_22=0 & b_1021=0b100000110010 & Rd_FPR32 & Rn_FPR32 & Zd { - Rd_FPR32 = NEON_fcmgt(Rn_FPR32, 0:4); + local tmp1:1 = Rn_FPR32 f> 0; + local tmp2:4 = zext(tmp1); + local tmp3:4 = ~ 0:4; + Rd_FPR32 = tmp2 * tmp3; + zext_zs(Zd); # zero upper 28 bytes of Zd } # C7.2.61 FCMGT (zero) page C7-2151 line 125404 MATCH x5ea0c800/mask=xffbffc00 @@ -4243,7 +5290,11 @@ is b_2331=0b010111101 & b_22=0 & b_1021=0b100000110010 & Rd_FPR32 & Rn_FPR32 & Z :fcmgt Rd_FPR64, Rn_FPR64, "#0.0" is b_2331=0b010111101 & b_22=1 & b_1021=0b100000110010 & Rd_FPR64 & Rn_FPR64 & Zd { - Rd_FPR64 = NEON_fcmgt(Rn_FPR64, 0:8); + local tmp1:1 = Rn_FPR64 f> 0; + local tmp2:8 = zext(tmp1); + local tmp3:8 = ~ 0:8; + Rd_FPR64 = tmp2 * tmp3; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.61 FCMGT (zero) page C7-2151 line 125404 MATCH x0ef8c800/mask=xbffffc00 @@ -4255,7 +5306,13 @@ is b_2331=0b010111101 & b_22=1 & b_1021=0b100000110010 & Rd_FPR64 & Rn_FPR64 & Z :fcmgt Rd_VPR64.4H, Rn_VPR64.4H, "#0.0" is b_31=0 & b_30=0 & b_1029=0b00111011111000110010 & Rd_VPR64.4H & Rn_VPR64.4H & Zd { - Rd_VPR64.4H = NEON_fcmgt(Rn_VPR64.4H, 0:2, 2:1); + local eqVal:2 = ~ 0; + local zero:2 = 0; + Rd_VPR64.4H[0,16] = zext(Rn_VPR64.4H[0,16] f> zero) * eqVal; + Rd_VPR64.4H[16,16] = zext(Rn_VPR64.4H[16,16] f> zero) * eqVal; + Rd_VPR64.4H[32,16] = zext(Rn_VPR64.4H[32,16] f> zero) * eqVal; + Rd_VPR64.4H[48,16] = zext(Rn_VPR64.4H[48,16] f> zero) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.61 FCMGT (zero) page C7-2151 line 125404 MATCH x0ef8c800/mask=xbffffc00 @@ -4267,7 +5324,17 @@ is b_31=0 & b_30=0 & b_1029=0b00111011111000110010 & Rd_VPR64.4H & Rn_VPR64.4H & :fcmgt Rd_VPR128.8H, Rn_VPR128.8H, "#0.0" is b_31=0 & b_30=1 & b_1029=0b00111011111000110010 & Rd_VPR128.8H & Rn_VPR128.8H & Zd { - Rd_VPR128.8H = NEON_fcmgt(Rn_VPR128.8H, 0:2, 2:1); + local eqVal:2 = ~ 0; + local zero:2 = 0; + Rd_VPR128.8H[0,16] = zext(Rn_VPR128.8H[0,16] f> zero) * eqVal; + Rd_VPR128.8H[16,16] = zext(Rn_VPR128.8H[16,16] f> zero) * eqVal; + Rd_VPR128.8H[32,16] = zext(Rn_VPR128.8H[32,16] f> zero) * eqVal; + Rd_VPR128.8H[48,16] = zext(Rn_VPR128.8H[48,16] f> zero) * eqVal; + Rd_VPR128.8H[64,16] = zext(Rn_VPR128.8H[64,16] f> zero) * eqVal; + Rd_VPR128.8H[80,16] = zext(Rn_VPR128.8H[80,16] f> zero) * eqVal; + Rd_VPR128.8H[96,16] = zext(Rn_VPR128.8H[96,16] f> zero) * eqVal; + Rd_VPR128.8H[112,16] = zext(Rn_VPR128.8H[112,16] f> zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.55 FCMLA (by element) page C7-1117 line 64749 KEEPWITH @@ -4383,10 +5450,14 @@ is b_31=0 & b_30=1 & b_2429=0b101110 & b_2223=0b11 & b_21=0 & b_1315=0b110 & b_1 # SMACRO(pseudo) ARG1 ARG2 0:8 =NEON_fcmle/2@8 # AUNIT --inst x6ee0d800/mask=xfffffc00 --rand dfp --status nopcodeop --comment "noflags" -:fcmle Rd_VPR128.2D, Rn_VPR128.2D, "#0" +:fcmle Rd_VPR128.2D, Rn_VPR128.2D, "#0.0" is b_3131=0 & q=1 & u=1 & b_2428=0xe & b_23=1 & b_1722=0x30 & b_1216=0xd & b_1011=2 & Rn_VPR128.2D & Rd_VPR128.2D & Zd { - Rd_VPR128.2D = NEON_fcmle(Rn_VPR128.2D, 0:8, 8:1); + local eqVal:8 = ~ 0; + local zero:8 = 0; + Rd_VPR128.2D[0,64] = zext(Rn_VPR128.2D[0,64] f<= zero) * eqVal; + Rd_VPR128.2D[64,64] = zext(Rn_VPR128.2D[64,64] f<= zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.64 FCMLE (zero) page C7-2160 line 125952 MATCH x2ea0d800/mask=xbfbffc00 @@ -4394,10 +5465,14 @@ is b_3131=0 & q=1 & u=1 & b_2428=0xe & b_23=1 & b_1722=0x30 & b_1216=0xd & b_101 # SMACRO(pseudo) ARG1 ARG2 0:2 =NEON_fcmle/2@2 # AUNIT --inst x2ea0d800/mask=xfffffc00 --rand sfp --status nopcodeop --comment "noflags" -:fcmle Rd_VPR64.2S, Rn_VPR64.2S, "#0" +:fcmle Rd_VPR64.2S, Rn_VPR64.2S, "#0.0" is b_3131=0 & q=0 & u=1 & b_2428=0xe & b_23=1 & b_1722=0x10 & b_1216=0xd & b_1011=2 & Rn_VPR64.2S & Rd_VPR64.2S & Zd { - Rd_VPR64.2S = NEON_fcmle(Rn_VPR64.2S, 0:2, 2:1); + local eqVal:4 = ~ 0; + local zero:4 = 0; + Rd_VPR64.2S[0,32] = zext(Rn_VPR64.2S[0,32] f<= zero) * eqVal; + Rd_VPR64.2S[32,32] = zext(Rn_VPR64.2S[32,32] f<= zero) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.64 FCMLE (zero) page C7-2160 line 125952 MATCH x2ea0d800/mask=xbfbffc00 @@ -4405,10 +5480,16 @@ is b_3131=0 & q=0 & u=1 & b_2428=0xe & b_23=1 & b_1722=0x10 & b_1216=0xd & b_101 # SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_fcmle/2@4 # AUNIT --inst x6ea0d800/mask=xfffffc00 --rand sfp --status nopcodeop -:fcmle Rd_VPR128.4S, Rn_VPR128.4S, "#0" +:fcmle Rd_VPR128.4S, Rn_VPR128.4S, "#0.0" is b_3131=0 & q=1 & u=1 & b_2428=0xe & b_23=1 & b_1722=0x10 & b_1216=0xd & b_1011=2 & Rn_VPR128.4S & Rd_VPR128.4S & Zd { - Rd_VPR128.4S = NEON_fcmle(Rn_VPR128.4S, 0:4, 4:1); + local eqVal:4 = ~ 0; + local zero:4 = 0; + Rd_VPR128.4S[0,32] = zext(Rn_VPR128.4S[0,32] f<= zero) * eqVal; + Rd_VPR128.4S[32,32] = zext(Rn_VPR128.4S[32,32] f<= zero) * eqVal; + Rd_VPR128.4S[64,32] = zext(Rn_VPR128.4S[64,32] f<= zero) * eqVal; + Rd_VPR128.4S[96,32] = zext(Rn_VPR128.4S[96,32] f<= zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.64 FCMLE (zero) page C7-2160 line 125952 MATCH x7ef8d800/mask=xfffffc00 @@ -4420,7 +5501,11 @@ is b_3131=0 & q=1 & u=1 & b_2428=0xe & b_23=1 & b_1722=0x10 & b_1216=0xd & b_101 :fcmle Rd_FPR16, Rn_FPR16, "#0.0" is b_1031=0b0111111011111000110110 & Rd_FPR16 & Rn_FPR16 & Zd { - Rd_FPR16 = NEON_fcmle(Rn_FPR16, 0:2); + local tmp1:1 = Rn_FPR16 f<= 0; + local tmp2:2 = zext(tmp1); + local tmp3:2 = ~ 0:2; + Rd_FPR16 = tmp2 * tmp3; + zext_zh(Zd); # zero upper 30 bytes of Zd } # C7.2.64 FCMLE (zero) page C7-2160 line 125952 MATCH x7ea0d800/mask=xffbffc00 @@ -4432,7 +5517,11 @@ is b_1031=0b0111111011111000110110 & Rd_FPR16 & Rn_FPR16 & Zd :fcmle Rd_FPR32, Rn_FPR32, "#0.0" is b_2331=0b011111101 & b_22=0 & b_1021=0b100000110110 & Rd_FPR32 & Rn_FPR32 & Zd { - Rd_FPR32 = NEON_fcmle(Rn_FPR32, 0:4); + local tmp1:1 = Rn_FPR32 f<= 0; + local tmp2:4 = zext(tmp1); + local tmp3:4 = ~ 0:4; + Rd_FPR32 = tmp2 * tmp3; + zext_zs(Zd); # zero upper 28 bytes of Zd } # C7.2.64 FCMLE (zero) page C7-2160 line 125952 MATCH x7ea0d800/mask=xffbffc00 @@ -4444,7 +5533,11 @@ is b_2331=0b011111101 & b_22=0 & b_1021=0b100000110110 & Rd_FPR32 & Rn_FPR32 & Z :fcmle Rd_FPR64, Rn_FPR64, "#0.0" is b_2331=0b011111101 & b_22=1 & b_1021=0b100000110110 & Rd_FPR64 & Rn_FPR64 & Zd { - Rd_FPR64 = NEON_fcmle(Rn_FPR64, 0:8); + local tmp1:1 = Rn_FPR64 f<= 0; + local tmp2:8 = zext(tmp1); + local tmp3:8 = ~ 0:8; + Rd_FPR64 = tmp2 * tmp3; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.64 FCMLE (zero) page C7-2160 line 125952 MATCH x2ef8d800/mask=xbffffc00 @@ -4456,7 +5549,13 @@ is b_2331=0b011111101 & b_22=1 & b_1021=0b100000110110 & Rd_FPR64 & Rn_FPR64 & Z :fcmle Rd_VPR64.4H, Rn_VPR64.4H, "#0.0" is b_31=0 & b_30=0 & b_1029=0b10111011111000110110 & Rd_VPR64.4H & Rn_VPR64.4H & Zd { - Rd_VPR64.4H = NEON_fcmle(Rn_VPR64.4H, 0:2, 2:1); + local eqVal:2 = ~ 0; + local zero:2 = 0; + Rd_VPR64.4H[0,16] = zext(Rn_VPR64.4H[0,16] f<= zero) * eqVal; + Rd_VPR64.4H[16,16] = zext(Rn_VPR64.4H[16,16] f<= zero) * eqVal; + Rd_VPR64.4H[32,16] = zext(Rn_VPR64.4H[32,16] f<= zero) * eqVal; + Rd_VPR64.4H[48,16] = zext(Rn_VPR64.4H[48,16] f<= zero) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.64 FCMLE (zero) page C7-2160 line 125952 MATCH x2ef8d800/mask=xbffffc00 @@ -4468,7 +5567,17 @@ is b_31=0 & b_30=0 & b_1029=0b10111011111000110110 & Rd_VPR64.4H & Rn_VPR64.4H & :fcmle Rd_VPR128.8H, Rn_VPR128.8H, "#0.0" is b_31=0 & b_30=1 & b_1029=0b10111011111000110110 & Rd_VPR128.8H & Rn_VPR128.8H & Zd { - Rd_VPR128.8H = NEON_fcmle(Rn_VPR128.8H, 0:2, 2:1); + local eqVal:2 = ~ 0; + local zero:2 = 0; + Rd_VPR128.8H[0,16] = zext(Rn_VPR128.8H[0,16] f<= zero) * eqVal; + Rd_VPR128.8H[16,16] = zext(Rn_VPR128.8H[16,16] f<= zero) * eqVal; + Rd_VPR128.8H[32,16] = zext(Rn_VPR128.8H[32,16] f<= zero) * eqVal; + Rd_VPR128.8H[48,16] = zext(Rn_VPR128.8H[48,16] f<= zero) * eqVal; + Rd_VPR128.8H[64,16] = zext(Rn_VPR128.8H[64,16] f<= zero) * eqVal; + Rd_VPR128.8H[80,16] = zext(Rn_VPR128.8H[80,16] f<= zero) * eqVal; + Rd_VPR128.8H[96,16] = zext(Rn_VPR128.8H[96,16] f<= zero) * eqVal; + Rd_VPR128.8H[112,16] = zext(Rn_VPR128.8H[112,16] f<= zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.65 FCMLT (zero) page C7-2163 line 126168 MATCH x0ea0e800/mask=xbfbffc00 @@ -4476,10 +5585,14 @@ is b_31=0 & b_30=1 & b_1029=0b10111011111000110110 & Rd_VPR128.8H & Rn_VPR128.8H # SMACRO(pseudo) ARG1 ARG2 0:8 =NEON_fcmlt/2@8 # AUNIT --inst x4ee0e800/mask=xfffffc00 --rand dfp --status nopcodeop --comment "noflags" -:fcmlt Rd_VPR128.2D, Rn_VPR128.2D, "#0" +:fcmlt Rd_VPR128.2D, Rn_VPR128.2D, "#0.0" is b_3131=0 & q=1 & u=0 & b_2428=0xe & b_23=1 & b_1722=0x30 & b_1216=0xe & b_1011=2 & Rn_VPR128.2D & Rd_VPR128.2D & Zd { - Rd_VPR128.2D = NEON_fcmlt(Rn_VPR128.2D, 0:8, 8:1); + local eqVal:8 = ~ 0; + local zero:8 = 0; + Rd_VPR128.2D[0,64] = zext(Rn_VPR128.2D[0,64] f< zero) * eqVal; + Rd_VPR128.2D[64,64] = zext(Rn_VPR128.2D[64,64] f< zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.65 FCMLT (zero) page C7-2163 line 126168 MATCH x0ea0e800/mask=xbfbffc00 @@ -4487,10 +5600,14 @@ is b_3131=0 & q=1 & u=0 & b_2428=0xe & b_23=1 & b_1722=0x30 & b_1216=0xe & b_101 # SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_fcmlt/2@4 # AUNIT --inst x0ea0e800/mask=xfffffc00 --rand sfp --status nopcodeop --comment "noflags" -:fcmlt Rd_VPR64.2S, Rn_VPR64.2S, "#0" +:fcmlt Rd_VPR64.2S, Rn_VPR64.2S, "#0.0" is b_3131=0 & q=0 & u=0 & b_2428=0xe & b_23=1 & b_1722=0x10 & b_1216=0xe & b_1011=2 & Rn_VPR64.2S & Rd_VPR64.2S & Zd { - Rd_VPR64.2S = NEON_fcmlt(Rn_VPR64.2S, 0:4, 4:1); + local eqVal:4 = ~ 0; + local zero:4 = 0; + Rd_VPR64.2S[0,32] = zext(Rn_VPR64.2S[0,32] f< zero) * eqVal; + Rd_VPR64.2S[32,32] = zext(Rn_VPR64.2S[32,32] f< zero) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.65 FCMLT (zero) page C7-2163 line 126168 MATCH x0ea0e800/mask=xbfbffc00 @@ -4498,10 +5615,16 @@ is b_3131=0 & q=0 & u=0 & b_2428=0xe & b_23=1 & b_1722=0x10 & b_1216=0xe & b_101 # SMACRO(pseudo) ARG1 ARG2 0:4 =NEON_fcmlt/2@4 # AUNIT --inst x4ea0e800/mask=xfffffc00 --rand sfp --status nopcodeop --comment "noflags" -:fcmlt Rd_VPR128.4S, Rn_VPR128.4S, "#0" +:fcmlt Rd_VPR128.4S, Rn_VPR128.4S, "#0.0" is b_3131=0 & q=1 & u=0 & b_2428=0xe & b_23=1 & b_1722=0x10 & b_1216=0xe & b_1011=2 & Rn_VPR128.4S & Rd_VPR128.4S & Zd { - Rd_VPR128.4S = NEON_fcmlt(Rn_VPR128.4S, 0:4, 4:1); + local eqVal:4 = ~ 0; + local zero:4 = 0; + Rd_VPR128.4S[0,32] = zext(Rn_VPR128.4S[0,32] f< zero) * eqVal; + Rd_VPR128.4S[32,32] = zext(Rn_VPR128.4S[32,32] f< zero) * eqVal; + Rd_VPR128.4S[64,32] = zext(Rn_VPR128.4S[64,32] f< zero) * eqVal; + Rd_VPR128.4S[96,32] = zext(Rn_VPR128.4S[96,32] f< zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.65 FCMLT (zero) page C7-2163 line 126168 MATCH x5ef8e800/mask=xfffffc00 @@ -4513,7 +5636,11 @@ is b_3131=0 & q=1 & u=0 & b_2428=0xe & b_23=1 & b_1722=0x10 & b_1216=0xe & b_101 :fcmlt Rd_FPR16, Rn_FPR16, "#0.0" is b_1031=0b0101111011111000111010 & Rd_FPR16 & Rn_FPR16 & Zd { - Rd_FPR16 = NEON_fcmlt(Rn_FPR16, 0:2); + local tmp1:1 = Rn_FPR16 f< 0; + local tmp2:2 = zext(tmp1); + local tmp3:2 = ~ 0:2; + Rd_FPR16 = tmp2 * tmp3; + zext_zh(Zd); # zero upper 30 bytes of Zd } # C7.2.65 FCMLT (zero) page C7-2163 line 126168 MATCH x5ea0e800/mask=xffbffc00 @@ -4525,7 +5652,11 @@ is b_1031=0b0101111011111000111010 & Rd_FPR16 & Rn_FPR16 & Zd :fcmlt Rd_FPR32, Rn_FPR32, "#0.0" is b_2331=0b010111101 & b_22=0 & b_1021=0b100000111010 & Rd_FPR32 & Rn_FPR32 & Zd { - Rd_FPR32 = NEON_fcmlt(Rn_FPR32, 0:4); + local tmp1:1 = Rn_FPR32 f< 0; + local tmp2:4 = zext(tmp1); + local tmp3:4 = ~ 0:4; + Rd_FPR32 = tmp2 * tmp3; + zext_zs(Zd); # zero upper 28 bytes of Zd } # C7.2.65 FCMLT (zero) page C7-2163 line 126168 MATCH x5ea0e800/mask=xffbffc00 @@ -4537,7 +5668,11 @@ is b_2331=0b010111101 & b_22=0 & b_1021=0b100000111010 & Rd_FPR32 & Rn_FPR32 & Z :fcmlt Rd_FPR64, Rn_FPR64, "#0.0" is b_2331=0b010111101 & b_22=1 & b_1021=0b100000111010 & Rd_FPR64 & Rn_FPR64 & Zd { - Rd_FPR64 = NEON_fcmlt(Rn_FPR64, 0:8); + local tmp1:1 = Rn_FPR64 f< 0; + local tmp2:8 = zext(tmp1); + local tmp3:8 = ~ 0:8; + Rd_FPR64 = tmp2 * tmp3; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.65 FCMLT (zero) page C7-2163 line 126168 MATCH x0ef8e800/mask=xbffffc00 @@ -4549,7 +5684,13 @@ is b_2331=0b010111101 & b_22=1 & b_1021=0b100000111010 & Rd_FPR64 & Rn_FPR64 & Z :fcmlt Rd_VPR64.4H, Rn_VPR64.4H, "#0.0" is b_31=0 & b_30=0 & b_1029=0b00111011111000111010 & Rd_VPR64.4H & Rn_VPR64.4H & Zd { - Rd_VPR64.4H = NEON_fcmlt(Rn_VPR64.4H, 0:2, 2:1); + local eqVal:2 = ~ 0; + local zero:2 = 0; + Rd_VPR64.4H[0,16] = zext(Rn_VPR64.4H[0,16] f< zero) * eqVal; + Rd_VPR64.4H[16,16] = zext(Rn_VPR64.4H[16,16] f< zero) * eqVal; + Rd_VPR64.4H[32,16] = zext(Rn_VPR64.4H[32,16] f< zero) * eqVal; + Rd_VPR64.4H[48,16] = zext(Rn_VPR64.4H[48,16] f< zero) * eqVal; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.65 FCMLT (zero) page C7-2163 line 126168 MATCH x0ef8e800/mask=xbffffc00 @@ -4561,7 +5702,17 @@ is b_31=0 & b_30=0 & b_1029=0b00111011111000111010 & Rd_VPR64.4H & Rn_VPR64.4H & :fcmlt Rd_VPR128.8H, Rn_VPR128.8H, "#0.0" is b_31=0 & b_30=1 & b_1029=0b00111011111000111010 & Rd_VPR128.8H & Rn_VPR128.8H & Zd { - Rd_VPR128.8H = NEON_fcmlt(Rn_VPR128.8H, 0:2, 2:1); + local eqVal:2 = ~ 0; + local zero:2 = 0; + Rd_VPR128.8H[0,16] = zext(Rn_VPR128.8H[0,16] f< zero) * eqVal; + Rd_VPR128.8H[16,16] = zext(Rn_VPR128.8H[16,16] f< zero) * eqVal; + Rd_VPR128.8H[32,16] = zext(Rn_VPR128.8H[32,16] f< zero) * eqVal; + Rd_VPR128.8H[48,16] = zext(Rn_VPR128.8H[48,16] f< zero) * eqVal; + Rd_VPR128.8H[64,16] = zext(Rn_VPR128.8H[64,16] f< zero) * eqVal; + Rd_VPR128.8H[80,16] = zext(Rn_VPR128.8H[80,16] f< zero) * eqVal; + Rd_VPR128.8H[96,16] = zext(Rn_VPR128.8H[96,16] f< zero) * eqVal; + Rd_VPR128.8H[112,16] = zext(Rn_VPR128.8H[112,16] f< zero) * eqVal; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.66 FCMP page C7-2166 line 126365 MATCH x1e202000/mask=xff20fc17 @@ -6123,7 +7274,7 @@ is b_1031=0b0001111001111110000000 & Rd_GPR32 & Rn_FPR64 & Rd_GPR64 :fmadd Rd_FPR64, Rn_FPR64, Rm_FPR64, Ra_FPR64 is m=0 & b_3030=0 & s=0 & b_2428=0x1f & ftype=1 & b_21=0 & Rm_FPR64 & b_15=0 & Ra_FPR64 & Rn_FPR64 & Rd_FPR64 & Zd { - Rd_FPR64 = NEON_fmadd(Rn_FPR64, Rm_FPR64, Ra_FPR64); + Rd_FPR64 = Ra_FPR64 f+ (Rm_FPR64 f* Rn_FPR64); #NEON_fmadd(Rn_FPR64, Rm_FPR64, Ra_FPR64); } # C7.2.100 FMADD page C7-2246 line 131323 MATCH x1f000000/mask=xff208000 @@ -6134,7 +7285,7 @@ is m=0 & b_3030=0 & s=0 & b_2428=0x1f & ftype=1 & b_21=0 & Rm_FPR64 & b_15=0 & R :fmadd Rd_FPR32, Rn_FPR32, Rm_FPR32, Ra_FPR32 is m=0 & b_3030=0 & s=0 & b_2428=0x1f & ftype=0 & b_21=0 & Rm_FPR32 & b_15=0 & Ra_FPR32 & Rn_FPR32 & Rd_FPR32 & Zd { - Rd_FPR32 = NEON_fmadd(Rn_FPR32, Rm_FPR32, Ra_FPR32); + Rd_FPR32 = Rn_FPR32 f+ (Rm_FPR32 f* Ra_FPR32); #NEON_fmadd(Rn_FPR32, Rm_FPR32, Ra_FPR32); } # C7.2.100 FMADD page C7-2246 line 131323 MATCH x1f000000/mask=xff208000 @@ -6145,7 +7296,7 @@ is m=0 & b_3030=0 & s=0 & b_2428=0x1f & ftype=0 & b_21=0 & Rm_FPR32 & b_15=0 & R :fmadd Rd_FPR16, Rn_FPR16, Rm_FPR16, Ra_FPR16 is m=0 & b_3030=0 & s=0 & b_2428=0x1f & ftype=3 & b_21=0 & Rm_FPR16 & b_15=0 & Ra_FPR16 & Rn_FPR16 & Rd_FPR16 & Zd { - Rd_FPR16 = NEON_fmadd(Rn_FPR16, Rm_FPR16, Ra_FPR16); + Rd_FPR16 = Ra_FPR16 f+ (Rm_FPR16 f* Rn_FPR16); #NEON_fmadd(Rn_FPR16, Rm_FPR16, Ra_FPR16); } # C7.2.101 FMAX (vector) page C7-2248 line 131451 MATCH x0e20f400/mask=xbfa0fc00 @@ -6247,7 +7398,12 @@ is m=0 & b_3030=0 & s=0 & b_2428=0x1e & ftype=0 & b_2121=1 & Rm_FPR32 & b_1215=0 :fmax Rd_FPR16, Rn_FPR16, Rm_FPR16 is m=0 & b_3030=0 & s=0 & b_2428=0x1e & ftype=3 & b_2121=1 & Rm_FPR16 & b_1215=0x4 & b_1011=2 & Rn_FPR16 & Rd_FPR16 & Zd { - Rd_FPR16 = NEON_fmax(Rn_FPR16, Rm_FPR16); + Rd_FPR16 = Rn_FPR16; + zext_zh(Zd); # zero upper 30 bytes of Zd + local tmp1:1 = Rn_FPR16 f> Rm_FPR16; + if (tmp1) goto inst_next; + Rd_FPR16 = Rm_FPR16; + zext_zh(Zd);# zero upper 30 bytes of Zd } # C7.2.103 FMAXNM (vector) page C7-2252 line 131688 MATCH x0e20c400/mask=xbfa0fc00 @@ -6675,7 +7831,12 @@ is b_31=0 & b_30=1 & b_2129=0b001110110 & b_1015=0b001101 & Rd_VPR128.8H & Rn_VP :fmin Rd_FPR64, Rn_FPR64, Rm_FPR64 is m=0 & b_3030=0 & s=0 & b_2428=0x1e & ftype=1 & b_2121=1 & Rm_FPR64 & b_1215=0x5 & b_1011=2 & Rn_FPR64 & Rd_FPR64 & Zd { - Rd_FPR64 = NEON_fmin(Rn_FPR64, Rm_FPR64); + Rd_FPR64 = Rn_FPR64; + zext_zd(Zd); # zero upper 24 bytes of Zd + local tmp1:1 = Rn_FPR64 f<= Rm_FPR64; + if (tmp1) goto inst_next; + Rd_FPR64 = Rm_FPR64; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.112 FMIN (scalar) page C7-2270 line 132758 MATCH x1e205800/mask=xff20fc00 @@ -6686,7 +7847,12 @@ is m=0 & b_3030=0 & s=0 & b_2428=0x1e & ftype=1 & b_2121=1 & Rm_FPR64 & b_1215=0 :fmin Rd_FPR32, Rn_FPR32, Rm_FPR32 is m=0 & b_3030=0 & s=0 & b_2428=0x1e & ftype=0 & b_2121=1 & Rm_FPR32 & b_1215=0x5 & b_1011=2 & Rn_FPR32 & Rd_FPR32 & Zd { - Rd_FPR32 = NEON_fmin(Rn_FPR32, Rm_FPR32); + Rd_FPR32 = Rn_FPR32; + zext_zs(Zd); # zero upper 28 bytes of Zd + local tmp1:1 = Rn_FPR32 f<= Rm_FPR32; + if (tmp1) goto inst_next; + Rd_FPR32 = Rm_FPR32; + zext_zs(Zd); # zero upper 28 bytes of Zd } # C7.2.112 FMIN (scalar) page C7-2270 line 132758 MATCH x1e205800/mask=xff20fc00 @@ -6697,7 +7863,12 @@ is m=0 & b_3030=0 & s=0 & b_2428=0x1e & ftype=0 & b_2121=1 & Rm_FPR32 & b_1215=0 :fmin Rd_FPR16, Rn_FPR16, Rm_FPR16 is m=0 & b_3030=0 & s=0 & b_2428=0x1e & ftype=3 & b_2121=1 & Rm_FPR16 & b_1215=0x5 & b_1011=2 & Rn_FPR16 & Rd_FPR16 & Zd { - Rd_FPR16 = NEON_fmin(Rn_FPR16, Rm_FPR16); + Rd_FPR16 = Rn_FPR16; + zext_zh(Zd); # zero upper 30 bytes of Zd + local tmp1:1 = Rn_FPR16 f<= Rm_FPR16; + if (tmp1) goto inst_next; + Rd_FPR16 = Rm_FPR16; + zext_zh(Zd);# zero upper 30 bytes of Zd } # C7.2.113 FMINNM (vector) page C7-2272 line 132865 MATCH x0ea0c400/mask=xbfa0fc00 @@ -8390,7 +9561,8 @@ is m=0 & b_3030=0 & s=0 & b_2428=0x1e & ftype=3 & b_2121=1 & Imm8_fmov16_operand :fmsub Rd_FPR64, Rn_FPR64, Rm_FPR64, Ra_FPR64 is m=0 & b_3030=0 & s=0 & b_2428=0x1f & ftype=1 & b_21=0 & Rm_FPR64 & b_15=1 & Ra_FPR64 & Rn_FPR64 & Rd_FPR64 & Zd { - Rd_FPR64 = NEON_fmsub(Rn_FPR64, Rm_FPR64, Ra_FPR64); + Rd_FPR64 = Ra_FPR64 f- (Rm_FPR64 f* Rn_FPR64); + } # C7.2.133 FMSUB page C7-2318 line 135582 MATCH x1f008000/mask=xff208000 @@ -8401,7 +9573,7 @@ is m=0 & b_3030=0 & s=0 & b_2428=0x1f & ftype=1 & b_21=0 & Rm_FPR64 & b_15=1 & R :fmsub Rd_FPR32, Rn_FPR32, Rm_FPR32, Ra_FPR32 is m=0 & b_3030=0 & s=0 & b_2428=0x1f & ftype=0 & b_21=0 & Rm_FPR32 & b_15=1 & Ra_FPR32 & Rn_FPR32 & Rd_FPR32 & Zd { - Rd_FPR32 = NEON_fmsub(Rn_FPR32, Rm_FPR32, Ra_FPR32); + Rd_FPR32 = Ra_FPR32 f- (Rm_FPR32 f* Rn_FPR32); } # C7.2.133 FMSUB page C7-2318 line 135582 MATCH x1f008000/mask=xff208000 @@ -8412,7 +9584,7 @@ is m=0 & b_3030=0 & s=0 & b_2428=0x1f & ftype=0 & b_21=0 & Rm_FPR32 & b_15=1 & R :fmsub Rd_FPR16, Rn_FPR16, Rm_FPR16, Ra_FPR16 is m=0 & b_3030=0 & s=0 & b_2428=0x1f & ftype=3 & b_21=0 & Rm_FPR16 & b_15=1 & Ra_FPR16 & Rn_FPR16 & Rd_FPR16 & Zd { - Rd_FPR16 = NEON_fmsub(Rn_FPR16, Rm_FPR16, Ra_FPR16); + Rd_FPR16 = Ra_FPR16 f- (Rm_FPR16 f* Rn_FPR16); } # C7.2.134 FMUL (by element) page C7-2320 line 135711 MATCH x5f009000/mask=xffc0f400 @@ -8697,8 +9869,11 @@ is m=0 & b_3030=0 & s=0 & b_2428=0x1e & ftype=3 & b_2121=1 & Rm_FPR16 & b_1215=0 :fmulx Rd_VPR128.2D, Rn_VPR128.2D, Re_VPR128.D.vIndex is b_3131=0 & q=1 & u=1 & b_2428=0xf & advSIMD3.size=3 & b_2121=0 & Re_VPR128.D.vIndex & vIndex & Re_VPR128.D & b_1215=0x9 & b_1010=0 & Rn_VPR128.2D & Rd_VPR128.2D & Zd { - local tmp1:8 = SIMD_PIECE(Re_VPR128.D, vIndex:1); - Rd_VPR128.2D = NEON_fmulx(Rn_VPR128.2D, tmp1, 8:1); + local tmp1:8 = Re_VPR128.D.vIndex; + # simd infix Rd_VPR128.2D = Rn_VPR128.2D f* tmp1 on lane size 8 + Rd_VPR128.2D[0,64] = Rn_VPR128.2D[0,64] f* tmp1; + Rd_VPR128.2D[64,64] = Rn_VPR128.2D[64,64] f* tmp1; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.137 FMULX (by element) page C7-2328 line 136175 MATCH x2f809000/mask=xbf80f400 @@ -8726,8 +9901,14 @@ is b_3131=0 & q=0 & u=1 & b_2428=0xf & advSIMD3.size=2 & Re_VPR128.S.vIndex & Re :fmulx Rd_VPR128.4S, Rn_VPR128.4S, Re_VPR128.S.vIndex is b_3131=0 & q=1 & u=1 & b_2428=0xf & advSIMD3.size=2 & Re_VPR128.S.vIndex & Re_VPR128.S & vIndex & b_1215=0x9 & b_1010=0 & Rn_VPR128.4S & Rd_VPR128.4S & Zd { - local tmp1:4 = SIMD_PIECE(Re_VPR128.S, vIndex:1); - Rd_VPR128.4S = NEON_fmulx(Rn_VPR128.4S, tmp1, 4:1); + # simd element Re_VPR128.S[vIndex] lane size 4 + local tmp1:4 = Re_VPR128.S.vIndex; + # simd infix Rd_VPR128.4S = Rn_VPR128.4S f* Rm_VPR128.4S on lane size 4 + Rd_VPR128.4S[0,32] = Rn_VPR128.4S[0,32] f* tmp1; + Rd_VPR128.4S[32,32] = Rn_VPR128.4S[32,32] f* tmp1; + Rd_VPR128.4S[64,32] = Rn_VPR128.4S[64,32] f* tmp1; + Rd_VPR128.4S[96,32] = Rn_VPR128.4S[96,32] f* tmp1; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.137 FMULX (by element) page C7-2328 line 136175 MATCH x7f009000/mask=xffc0f400 @@ -9065,8 +10246,8 @@ is m=0 & b_3030=0 & s=0 & b_2428=0x1e & ftype=3 & b_2121=1 & fpDpOpcode=0x2 & b_ :fnmadd Rd_FPR64, Rn_FPR64, Rm_FPR64, Ra_FPR64 is m=0 & b_3030=0 & s=0 & b_2428=0x1f & ftype=1 & b_21=1 & Rm_FPR64 & b_15=0 & Ra_FPR64 & Rn_FPR64 & Rd_FPR64 & Zd { - local tmp1:8 = f- Ra_FPR64; - Rd_FPR64 = NEON_fnmadd(Rn_FPR64, Rm_FPR64, tmp1); + Rd_FPR64 = (f-(Rn_FPR64 f* Rm_FPR64)) f- Ra_FPR64; + zext_zd(Zd); } # C7.2.141 FNMADD page C7-2339 line 136822 MATCH x1f200000/mask=xff208000 @@ -9077,8 +10258,8 @@ is m=0 & b_3030=0 & s=0 & b_2428=0x1f & ftype=1 & b_21=1 & Rm_FPR64 & b_15=0 & R :fnmadd Rd_FPR32, Rn_FPR32, Rm_FPR32, Ra_FPR32 is m=0 & b_3030=0 & s=0 & b_2428=0x1f & ftype=0 & b_21=1 & Rm_FPR32 & b_15=0 & Ra_FPR32 & Rn_FPR32 & Rd_FPR32 & Zd { - local tmp1:4 = f- Ra_FPR32; - Rd_FPR32 = NEON_fnmadd(Rn_FPR32, Rm_FPR32, tmp1); + Rd_FPR32 = (f-(Rn_FPR32 f* Rm_FPR32)) f- Ra_FPR32; + zext_zs(Zd); } # C7.2.141 FNMADD page C7-2339 line 136822 MATCH x1f200000/mask=xff208000 @@ -9089,8 +10270,8 @@ is m=0 & b_3030=0 & s=0 & b_2428=0x1f & ftype=0 & b_21=1 & Rm_FPR32 & b_15=0 & R :fnmadd Rd_FPR16, Rn_FPR16, Rm_FPR16, Ra_FPR16 is m=0 & b_3030=0 & s=0 & b_2428=0x1f & ftype=3 & b_21=1 & Rm_FPR16 & b_15=0 & Ra_FPR16 & Rn_FPR16 & Rd_FPR16 & Zd { - local tmp1:2 = f- Ra_FPR16; - Rd_FPR16 = NEON_fnmadd(Rn_FPR16, Rm_FPR16, tmp1); + Rd_FPR16 = (f-(Rn_FPR16 f* Rm_FPR16)) f- Ra_FPR16; + zext_zh(Zd); } # C7.2.142 FNMSUB page C7-2341 line 136952 MATCH x1f208000/mask=xff208000 @@ -9101,7 +10282,8 @@ is m=0 & b_3030=0 & s=0 & b_2428=0x1f & ftype=3 & b_21=1 & Rm_FPR16 & b_15=0 & R :fnmsub Rd_FPR64, Rn_FPR64, Rm_FPR64, Ra_FPR64 is m=0 & b_3030=0 & s=0 & b_2428=0x1f & ftype=1 & b_21=1 & Rm_FPR64 & b_15=1 & Ra_FPR64 & Rn_FPR64 & Rd_FPR64 & Zd { - Rd_FPR64 = NEON_fnmsub(Rn_FPR64, Rm_FPR64, Ra_FPR64); + Rd_FPR64 = (Rn_FPR64 f* Rm_FPR64) f- Ra_FPR64; + zext_zd(Zd); } # C7.2.142 FNMSUB page C7-2341 line 136952 MATCH x1f208000/mask=xff208000 @@ -9112,7 +10294,8 @@ is m=0 & b_3030=0 & s=0 & b_2428=0x1f & ftype=1 & b_21=1 & Rm_FPR64 & b_15=1 & R :fnmsub Rd_FPR32, Rn_FPR32, Rm_FPR32, Ra_FPR32 is m=0 & b_3030=0 & s=0 & b_2428=0x1f & ftype=0 & b_21=1 & Rm_FPR32 & b_15=1 & Ra_FPR32 & Rn_FPR32 & Rd_FPR32 & Zd { - Rd_FPR32 = NEON_fnmsub(Rn_FPR32, Rm_FPR32, Ra_FPR32); + Rd_FPR32 = (Rn_FPR32 f* Rm_FPR32) f- Ra_FPR32; + zext_zs(Zd); } # C7.2.142 FNMSUB page C7-2341 line 136952 MATCH x1f208000/mask=xff208000 @@ -9123,7 +10306,8 @@ is m=0 & b_3030=0 & s=0 & b_2428=0x1f & ftype=0 & b_21=1 & Rm_FPR32 & b_15=1 & R :fnmsub Rd_FPR16, Rn_FPR16, Rm_FPR16, Ra_FPR16 is m=0 & b_3030=0 & s=0 & b_2428=0x1f & ftype=3 & b_21=1 & Rm_FPR16 & b_15=1 & Ra_FPR16 & Rn_FPR16 & Rd_FPR16 & Zd { - Rd_FPR16 = NEON_fnmsub(Rn_FPR16, Rm_FPR16, Ra_FPR16); + Rd_FPR16 = (Rn_FPR16 f* Rm_FPR16) f- Ra_FPR16; + zext_zh(Zd); } # C7.2.143 FNMUL (scalar) page C7-2343 line 137081 MATCH x1e208800/mask=xff20fc00 @@ -9788,7 +10972,12 @@ is b_31=0 & b_30=1 & b_2329=0b0011101 & b_22=1 & b_21=1 & b_1015=0b111111 & Rd_V :fsqrt Rd_VPR64.4H, Rn_VPR64.4H is b_31=0 & b_30=0 & b_2329=0b1011101 & b_22=1 & b_1021=0b111001111110 & Rd_VPR64.4H & Rn_VPR64.4H & Zd { - Rd_VPR64.4H = NEON_fsqrt(Rn_VPR64.4H, 2:1); + # simd unary Rd_VPR64.4H = sqrt(Rn_VPR64.4H) on lane size 2 + Rd_VPR64.4H[0,16] = sqrt(Rn_VPR64.4H[0,16]); + Rd_VPR64.4H[16,16] = sqrt(Rn_VPR64.4H[16,16]); + Rd_VPR64.4H[32,16] = sqrt(Rn_VPR64.4H[32,16]); + Rd_VPR64.4H[48,16] = sqrt(Rn_VPR64.4H[48,16]); + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.171 FSQRT (vector) page C7-2403 line 140456 MATCH x2ef9f800/mask=xbffffc00 @@ -9800,7 +10989,16 @@ is b_31=0 & b_30=0 & b_2329=0b1011101 & b_22=1 & b_1021=0b111001111110 & Rd_VPR6 :fsqrt Rd_VPR128.8H, Rn_VPR128.8H is b_31=0 & b_30=1 & b_2329=0b1011101 & b_22=1 & b_1021=0b111001111110 & Rd_VPR128.8H & Rn_VPR128.8H & Zd { - Rd_VPR128.8H = NEON_fsqrt(Rn_VPR128.8H, 2:1); + # simd unary Rd_VPR128.8H = sqrt(Rn_VPR128.8H) on lane size 2 + Rd_VPR128.8H[0,16] = sqrt(Rn_VPR128.8H[0,16]); + Rd_VPR128.8H[16,16] = sqrt(Rn_VPR128.8H[16,16]); + Rd_VPR128.8H[32,16] = sqrt(Rn_VPR128.8H[32,16]); + Rd_VPR128.8H[48,16] = sqrt(Rn_VPR128.8H[48,16]); + Rd_VPR128.8H[64,16] = sqrt(Rn_VPR128.8H[64,16]); + Rd_VPR128.8H[80,16] = sqrt(Rn_VPR128.8H[80,16]); + Rd_VPR128.8H[96,16] = sqrt(Rn_VPR128.8H[96,16]); + Rd_VPR128.8H[112,16] = sqrt(Rn_VPR128.8H[112,16]); + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.171 FSQRT (vector) page C7-2403 line 140456 MATCH x2ea1f800/mask=xbfbffc00 @@ -9812,7 +11010,10 @@ is b_31=0 & b_30=1 & b_2329=0b1011101 & b_22=1 & b_1021=0b111001111110 & Rd_VPR1 :fsqrt Rd_VPR64.2S, Rn_VPR64.2S is b_31=0 & b_30=0 & b_2329=0b1011101 & b_22=0 & b_1021=0b100001111110 & Rd_VPR64.2S & Rn_VPR64.2S & Zd { - Rd_VPR64.2S = NEON_fsqrt(Rn_VPR64.2S, 4:1); + # simd unary Rd_VPR64.2S = sqrt(Rn_VPR64.2S) on lane size 4 + Rd_VPR64.2S[0,32] = sqrt(Rn_VPR64.2S[0,32]); + Rd_VPR64.2S[32,32] = sqrt(Rn_VPR64.2S[32,32]); + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.171 FSQRT (vector) page C7-2403 line 140456 MATCH x2ea1f800/mask=xbfbffc00 @@ -9824,7 +11025,12 @@ is b_31=0 & b_30=0 & b_2329=0b1011101 & b_22=0 & b_1021=0b100001111110 & Rd_VPR6 :fsqrt Rd_VPR128.4S, Rn_VPR128.4S is b_31=0 & b_30=1 & b_2329=0b1011101 & b_22=0 & b_1021=0b100001111110 & Rd_VPR128.4S & Rn_VPR128.4S & Zd { - Rd_VPR128.4S = NEON_fsqrt(Rn_VPR128.4S, 4:1); + # simd unary Rd_VPR128.4S = sqrt(Rn_VPR128.4S) on lane size 4 + Rd_VPR128.4S[0,32] = sqrt(Rn_VPR128.4S[0,32]); + Rd_VPR128.4S[32,32] = sqrt(Rn_VPR128.4S[32,32]); + Rd_VPR128.4S[64,32] = sqrt(Rn_VPR128.4S[64,32]); + Rd_VPR128.4S[96,32] = sqrt(Rn_VPR128.4S[96,32]); + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.171 FSQRT (vector) page C7-2403 line 140456 MATCH x2ea1f800/mask=xbfbffc00 @@ -9836,7 +11042,9 @@ is b_31=0 & b_30=1 & b_2329=0b1011101 & b_22=0 & b_1021=0b100001111110 & Rd_VPR1 :fsqrt Rd_VPR128.2D, Rn_VPR128.2D is b_31=0 & b_30=1 & b_2329=0b1011101 & b_22=1 & b_1021=0b100001111110 & Rd_VPR128.2D & Rn_VPR128.2D & Zd { - Rd_VPR128.2D = NEON_fsqrt(Rn_VPR128.2D, 8:1); + # simd unary Rd_VPR128.2D = sqrt(Rn_VPR128.2D) on lane size 8 + Rd_VPR128.2D[0,64] = sqrt(Rn_VPR128.2D[0,64]); + Rd_VPR128.2D[64,64] = sqrt(Rn_VPR128.2D[64,64]); } # C7.2.172 FSQRT (scalar) page C7-2405 line 140566 MATCH x1e21c000/mask=xff3ffc00 @@ -11875,7 +13083,16 @@ is b_3131=0 & q=1 & u=1 & b_2428=0x1e & advSIMD3.size=3 & b_1721=0x10 & b_1216=0 :neg Rd_VPR64.8B, Rn_VPR64.8B is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0xb & b_1011=2 & Rn_VPR64.8B & Rd_VPR64.8B & Zd { - Rd_VPR64.8B = NEON_neg(Rn_VPR64.8B, 1:1); + # simd unary Rd_VPR64.8B = -Rn_VPR64.8B on lane size 1 + Rd_VPR64.8B[0,8] = -Rn_VPR64.8B[0,8]; + Rd_VPR64.8B[8,8] = -Rn_VPR64.8B[8,8]; + Rd_VPR64.8B[16,8] = -Rn_VPR64.8B[16,8]; + Rd_VPR64.8B[24,8] = -Rn_VPR64.8B[24,8]; + Rd_VPR64.8B[32,8] = -Rn_VPR64.8B[32,8]; + Rd_VPR64.8B[40,8] = -Rn_VPR64.8B[40,8]; + Rd_VPR64.8B[48,8] = -Rn_VPR64.8B[48,8]; + Rd_VPR64.8B[56,8] = -Rn_VPR64.8B[56,8]; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.209 NEG (vector) page C7-2501 line 146404 MATCH x2e20b800/mask=xbf3ffc00 @@ -11886,7 +13103,24 @@ is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0x :neg Rd_VPR128.16B, Rn_VPR128.16B is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0xb & b_1011=2 & Rn_VPR128.16B & Rd_VPR128.16B & Zd { - Rd_VPR128.16B = NEON_neg(Rn_VPR128.16B, 1:1); + # simd unary Rd_VPR128.16B = -Rn_VPR128.16B on lane size 1 + Rd_VPR128.16B[0,8] = -Rn_VPR128.16B[0,8]; + Rd_VPR128.16B[8,8] = -Rn_VPR128.16B[8,8]; + Rd_VPR128.16B[16,8] = -Rn_VPR128.16B[16,8]; + Rd_VPR128.16B[24,8] = -Rn_VPR128.16B[24,8]; + Rd_VPR128.16B[32,8] = -Rn_VPR128.16B[32,8]; + Rd_VPR128.16B[40,8] = -Rn_VPR128.16B[40,8]; + Rd_VPR128.16B[48,8] = -Rn_VPR128.16B[48,8]; + Rd_VPR128.16B[56,8] = -Rn_VPR128.16B[56,8]; + Rd_VPR128.16B[64,8] = -Rn_VPR128.16B[64,8]; + Rd_VPR128.16B[72,8] = -Rn_VPR128.16B[72,8]; + Rd_VPR128.16B[80,8] = -Rn_VPR128.16B[80,8]; + Rd_VPR128.16B[88,8] = -Rn_VPR128.16B[88,8]; + Rd_VPR128.16B[96,8] = -Rn_VPR128.16B[96,8]; + Rd_VPR128.16B[104,8] = -Rn_VPR128.16B[104,8]; + Rd_VPR128.16B[112,8] = -Rn_VPR128.16B[112,8]; + Rd_VPR128.16B[120,8] = -Rn_VPR128.16B[120,8]; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.209 NEG (vector) page C7-2501 line 146404 MATCH x2e20b800/mask=xbf3ffc00 @@ -11897,7 +13131,12 @@ is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=0 & b_1721=0x10 & b_1216=0x :neg Rd_VPR64.4H, Rn_VPR64.4H is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x10 & b_1216=0xb & b_1011=2 & Rn_VPR64.4H & Rd_VPR64.4H & Zd { - Rd_VPR64.4H = NEON_neg(Rn_VPR64.4H, 2:1); + # simd unary Rd_VPR64.4H = -Rn_VPR64.4H on lane size 2 + Rd_VPR64.4H[0,16] = -Rn_VPR64.4H[0,16]; + Rd_VPR64.4H[16,16] = -Rn_VPR64.4H[16,16]; + Rd_VPR64.4H[32,16] = -Rn_VPR64.4H[32,16]; + Rd_VPR64.4H[48,16] = -Rn_VPR64.4H[48,16]; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.209 NEG (vector) page C7-2501 line 146404 MATCH x2e20b800/mask=xbf3ffc00 @@ -11908,7 +13147,16 @@ is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x10 & b_1216=0x :neg Rd_VPR128.8H, Rn_VPR128.8H is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x10 & b_1216=0xb & b_1011=2 & Rn_VPR128.8H & Rd_VPR128.8H & Zd { - Rd_VPR128.8H = NEON_neg(Rn_VPR128.8H, 2:1); + # simd unary Rd_VPR128.8H = -Rn_VPR128.8H on lane size 2 + Rd_VPR128.8H[0,16] = -Rn_VPR128.8H[0,16]; + Rd_VPR128.8H[16,16] = -Rn_VPR128.8H[16,16]; + Rd_VPR128.8H[32,16] = -Rn_VPR128.8H[32,16]; + Rd_VPR128.8H[48,16] = -Rn_VPR128.8H[48,16]; + Rd_VPR128.8H[64,16] = -Rn_VPR128.8H[64,16]; + Rd_VPR128.8H[80,16] = -Rn_VPR128.8H[80,16]; + Rd_VPR128.8H[96,16] = -Rn_VPR128.8H[96,16]; + Rd_VPR128.8H[112,16] = -Rn_VPR128.8H[112,16]; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.209 NEG (vector) page C7-2501 line 146404 MATCH x2e20b800/mask=xbf3ffc00 @@ -11919,7 +13167,10 @@ is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=1 & b_1721=0x10 & b_1216=0x :neg Rd_VPR64.2S, Rn_VPR64.2S is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0xb & b_1011=2 & Rn_VPR64.2S & Rd_VPR64.2S & Zd { - Rd_VPR64.2S = NEON_neg(Rn_VPR64.2S, 4:1); + # simd unary Rd_VPR64.2S = -Rn_VPR64.2S on lane size 4 + Rd_VPR64.2S[0,32] = -Rn_VPR64.2S[0,32]; + Rd_VPR64.2S[32,32] = -Rn_VPR64.2S[32,32]; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.209 NEG (vector) page C7-2501 line 146404 MATCH x2e20b800/mask=xbf3ffc00 @@ -11930,7 +13181,12 @@ is b_3131=0 & q=0 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0x :neg Rd_VPR128.4S, Rn_VPR128.4S is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0xb & b_1011=2 & Rn_VPR128.4S & Rd_VPR128.4S & Zd { - Rd_VPR128.4S = NEON_neg(Rn_VPR128.4S, 4:1); + # simd unary Rd_VPR128.4S = -Rn_VPR128.4S on lane size 4 + Rd_VPR128.4S[0,32] = -Rn_VPR128.4S[0,32]; + Rd_VPR128.4S[32,32] = -Rn_VPR128.4S[32,32]; + Rd_VPR128.4S[64,32] = -Rn_VPR128.4S[64,32]; + Rd_VPR128.4S[96,32] = -Rn_VPR128.4S[96,32]; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.209 NEG (vector) page C7-2501 line 146404 MATCH x2e20b800/mask=xbf3ffc00 @@ -11941,7 +13197,10 @@ is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=2 & b_1721=0x10 & b_1216=0x :neg Rd_VPR128.2D, Rn_VPR128.2D is b_3131=0 & q=1 & u=1 & b_2428=0xe & advSIMD3.size=3 & b_1721=0x10 & b_1216=0xb & b_1011=2 & Rn_VPR128.2D & Rd_VPR128.2D & Zd { - Rd_VPR128.2D = NEON_neg(Rn_VPR128.2D, 8:1); + # simd unary Rd_VPR128.2D = -Rn_VPR128.2D on lane size 8 + Rd_VPR128.2D[0,64] = -Rn_VPR128.2D[0,64]; + Rd_VPR128.2D[64,64] = -Rn_VPR128.2D[64,64]; + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.211 ORN (vector) page C7-2505 line 146624 MATCH x0ee01c00/mask=xbfe0fc00 @@ -12960,6 +14219,10 @@ is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_2121=1 & Rm_VPR128.16 zext_zq(Zd); # zero upper 16 bytes of Zd } +# C7.2.226 SABD page C7-2534 line 148264 MATCH x0e207400/mask=xbf20fc00 +# CONSTRUCT x4ea07400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES +# SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_sabd/2@4 +# AUNIT --inst x4ea07400/mask=xffe0fc00 --status nopcodeop --comment "abd" # C7.2.226 SABD page C7-2534 line 148264 MATCH x0e207400/mask=xbf20fc00 # CONSTRUCT x4e207400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES # SMACRO(pseudo) ARG1 ARG2 ARG3 =NEON_sabd/2@1 @@ -12968,7 +14231,120 @@ is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_2121=1 & Rm_VPR128.16 :sabd Rd_VPR128.16B, Rn_VPR128.16B, Rm_VPR128.16B is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_2121=1 & Rm_VPR128.16B & b_1115=0xe & b_1010=1 & Rn_VPR128.16B & Rd_VPR128.16B & Zd { - Rd_VPR128.16B = NEON_sabd(Rn_VPR128.16B, Rm_VPR128.16B, 1:1); + # simd infix TMPQ1 = Rn_VPR128.16B- Rm_VPR128.16B on lane size 1 + TMPQ1[0,8] = Rn_VPR128.16B[0,8] - Rm_VPR128.16B[0,8]; + TMPQ1[8,8] = Rn_VPR128.16B[8,8] - Rm_VPR128.16B[8,8]; + TMPQ1[16,8] = Rn_VPR128.16B[16,8] - Rm_VPR128.16B[16,8]; + TMPQ1[24,8] = Rn_VPR128.16B[24,8] - Rm_VPR128.16B[24,8]; + TMPQ1[32,8] = Rn_VPR128.16B[32,8] - Rm_VPR128.16B[32,8]; + TMPQ1[40,8] = Rn_VPR128.16B[40,8] - Rm_VPR128.16B[40,8]; + TMPQ1[48,8] = Rn_VPR128.16B[48,8] - Rm_VPR128.16B[48,8]; + TMPQ1[56,8] = Rn_VPR128.16B[56,8] - Rm_VPR128.16B[56,8]; + TMPQ1[64,8] = Rn_VPR128.16B[64,8] - Rm_VPR128.16B[64,8]; + TMPQ1[72,8] = Rn_VPR128.16B[72,8] - Rm_VPR128.16B[72,8]; + TMPQ1[80,8] = Rn_VPR128.16B[80,8] - Rm_VPR128.16B[80,8]; + TMPQ1[88,8] = Rn_VPR128.16B[88,8] - Rm_VPR128.16B[88,8]; + TMPQ1[96,8] = Rn_VPR128.16B[96,8] - Rm_VPR128.16B[96,8]; + TMPQ1[104,8] = Rn_VPR128.16B[104,8] - Rm_VPR128.16B[104,8]; + TMPQ1[112,8] = Rn_VPR128.16B[112,8] - Rm_VPR128.16B[112,8]; + TMPQ1[120,8] = Rn_VPR128.16B[120,8] - Rm_VPR128.16B[120,8]; + + + # simd infix TMPQ2 = Rm_VPR128.16B - Rn_VPR128.16B on lane size 1 + TMPQ2[0,8] = Rm_VPR128.16B[0,8] - Rn_VPR128.16B[0,8]; + TMPQ2[8,8] = Rm_VPR128.16B[8,8] - Rn_VPR128.16B[8,8]; + TMPQ2[16,8] = Rm_VPR128.16B[16,8] - Rn_VPR128.16B[16,8]; + TMPQ2[24,8] = Rm_VPR128.16B[24,8] - Rn_VPR128.16B[24,8]; + TMPQ2[32,8] = Rm_VPR128.16B[32,8] - Rn_VPR128.16B[32,8]; + TMPQ2[40,8] = Rm_VPR128.16B[40,8] - Rn_VPR128.16B[40,8]; + TMPQ2[48,8] = Rm_VPR128.16B[48,8] - Rn_VPR128.16B[48,8]; + TMPQ2[56,8] = Rm_VPR128.16B[56,8] - Rn_VPR128.16B[56,8]; + TMPQ2[64,8] = Rm_VPR128.16B[64,8] - Rn_VPR128.16B[64,8]; + TMPQ2[72,8] = Rm_VPR128.16B[72,8] - Rn_VPR128.16B[72,8]; + TMPQ2[80,8] = Rm_VPR128.16B[80,8] - Rn_VPR128.16B[80,8]; + TMPQ2[88,8] = Rm_VPR128.16B[88,8] - Rn_VPR128.16B[88,8]; + TMPQ2[96,8] = Rm_VPR128.16B[96,8] - Rn_VPR128.16B[96,8]; + TMPQ2[104,8] = Rm_VPR128.16B[104,8] - Rn_VPR128.16B[104,8]; + TMPQ2[112,8] = Rm_VPR128.16B[112,8] - Rn_VPR128.16B[112,8]; + TMPQ2[120,8] = Rm_VPR128.16B[120,8] - Rn_VPR128.16B[120,8]; + + + # simd infix TMPQ2 = TMPQ2 * 2:1 on lane size 1 + TMPQ2[0,8] = TMPQ2[0,8] * 2:1; + TMPQ2[8,8] = TMPQ2[8,8] * 2:1; + TMPQ2[16,8] = TMPQ2[16,8] * 2:1; + TMPQ2[24,8] = TMPQ2[24,8] * 2:1; + TMPQ2[32,8] = TMPQ2[32,8] * 2:1; + TMPQ2[40,8] = TMPQ2[40,8] * 2:1; + TMPQ2[48,8] = TMPQ2[48,8] * 2:1; + TMPQ2[56,8] = TMPQ2[56,8] * 2:1; + TMPQ2[64,8] = TMPQ2[64,8] * 2:1; + TMPQ2[72,8] = TMPQ2[72,8] * 2:1; + TMPQ2[80,8] = TMPQ2[80,8] * 2:1; + TMPQ2[88,8] = TMPQ2[88,8] * 2:1; + TMPQ2[96,8] = TMPQ2[96,8] * 2:1; + TMPQ2[104,8] = TMPQ2[104,8] * 2:1; + TMPQ2[112,8] = TMPQ2[112,8] * 2:1; + TMPQ2[120,8] = TMPQ2[120,8] * 2:1; + + + # simd infix TMPQ3 = Rn_VPR128.16B s< Rm_VPR128.16B on lane size 1 + TMPQ3[0,8] = zext(Rn_VPR128.16B[0,8] s< Rm_VPR128.16B[0,8]); + TMPQ3[8,8] = zext(Rn_VPR128.16B[8,8] s< Rm_VPR128.16B[8,8]); + TMPQ3[16,8] = zext(Rn_VPR128.16B[16,8] s< Rm_VPR128.16B[16,8]); + TMPQ3[24,8] = zext(Rn_VPR128.16B[24,8] s< Rm_VPR128.16B[24,8]); + TMPQ3[32,8] = zext(Rn_VPR128.16B[32,8] s< Rm_VPR128.16B[32,8]); + TMPQ3[40,8] = zext(Rn_VPR128.16B[40,8] s< Rm_VPR128.16B[40,8]); + TMPQ3[48,8] = zext(Rn_VPR128.16B[48,8] s< Rm_VPR128.16B[48,8]); + TMPQ3[56,8] = zext(Rn_VPR128.16B[56,8] s< Rm_VPR128.16B[56,8]); + TMPQ3[64,8] = zext(Rn_VPR128.16B[64,8] s< Rm_VPR128.16B[64,8]); + TMPQ3[72,8] = zext(Rn_VPR128.16B[72,8] s< Rm_VPR128.16B[72,8]); + TMPQ3[80,8] = zext(Rn_VPR128.16B[80,8] s< Rm_VPR128.16B[80,8]); + TMPQ3[88,8] = zext(Rn_VPR128.16B[88,8] s< Rm_VPR128.16B[88,8]); + TMPQ3[96,8] = zext(Rn_VPR128.16B[96,8] s< Rm_VPR128.16B[96,8]); + TMPQ3[104,8] = zext(Rn_VPR128.16B[104,8] s< Rm_VPR128.16B[104,8]); + TMPQ3[112,8] = zext(Rn_VPR128.16B[112,8] s< Rm_VPR128.16B[112,8]); + TMPQ3[120,8] = zext(Rn_VPR128.16B[120,8] s< Rm_VPR128.16B[120,8]); + + + # simd infix TMPQ2 = TMPQ2 * TMPQ3 on lane size 1 + TMPQ2[0,8] = TMPQ2[0,8] * TMPQ3[0,8]; + TMPQ2[8,8] = TMPQ2[8,8] * TMPQ3[8,8]; + TMPQ2[16,8] = TMPQ2[16,8] * TMPQ3[16,8]; + TMPQ2[24,8] = TMPQ2[24,8] * TMPQ3[24,8]; + TMPQ2[32,8] = TMPQ2[32,8] * TMPQ3[32,8]; + TMPQ2[40,8] = TMPQ2[40,8] * TMPQ3[40,8]; + TMPQ2[48,8] = TMPQ2[48,8] * TMPQ3[48,8]; + TMPQ2[56,8] = TMPQ2[56,8] * TMPQ3[56,8]; + TMPQ2[64,8] = TMPQ2[64,8] * TMPQ3[64,8]; + TMPQ2[72,8] = TMPQ2[72,8] * TMPQ3[72,8]; + TMPQ2[80,8] = TMPQ2[80,8] * TMPQ3[80,8]; + TMPQ2[88,8] = TMPQ2[88,8] * TMPQ3[88,8]; + TMPQ2[96,8] = TMPQ2[96,8] * TMPQ3[96,8]; + TMPQ2[104,8] = TMPQ2[104,8] * TMPQ3[104,8]; + TMPQ2[112,8] = TMPQ2[112,8] * TMPQ3[112,8]; + TMPQ2[120,8] = TMPQ2[120,8] * TMPQ3[120,8]; + + + # simd infix Rd_VPR128.16B = TMPQ1 + TMPQ2 on lane size 1 + Rd_VPR128.16B[0,8] = TMPQ1[0,8] + TMPQ2[0,8]; + Rd_VPR128.16B[8,8] = TMPQ1[8,8] + TMPQ2[8,8]; + Rd_VPR128.16B[16,8] = TMPQ1[16,8] + TMPQ2[16,8]; + Rd_VPR128.16B[24,8] = TMPQ1[24,8] + TMPQ2[24,8]; + Rd_VPR128.16B[32,8] = TMPQ1[32,8] + TMPQ2[32,8]; + Rd_VPR128.16B[40,8] = TMPQ1[40,8] + TMPQ2[40,8]; + Rd_VPR128.16B[48,8] = TMPQ1[48,8] + TMPQ2[48,8]; + Rd_VPR128.16B[56,8] = TMPQ1[56,8] + TMPQ2[56,8]; + Rd_VPR128.16B[64,8] = TMPQ1[64,8] + TMPQ2[64,8]; + Rd_VPR128.16B[72,8] = TMPQ1[72,8] + TMPQ2[72,8]; + Rd_VPR128.16B[80,8] = TMPQ1[80,8] + TMPQ2[80,8]; + Rd_VPR128.16B[88,8] = TMPQ1[88,8] + TMPQ2[88,8]; + Rd_VPR128.16B[96,8] = TMPQ1[96,8] + TMPQ2[96,8]; + Rd_VPR128.16B[104,8] = TMPQ1[104,8] + TMPQ2[104,8]; + Rd_VPR128.16B[112,8] = TMPQ1[112,8] + TMPQ2[112,8]; + Rd_VPR128.16B[120,8] = TMPQ1[120,8] + TMPQ2[120,8]; + + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.226 SABD page C7-2534 line 148264 MATCH x0e207400/mask=xbf20fc00 @@ -12985,21 +14361,27 @@ is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR64.2S # simd infix TMPD1 = Rn_VPR64.2S - Rm_VPR64.2S on lane size 4 TMPD1[0,32] = Rn_VPR64.2S[0,32] - Rm_VPR64.2S[0,32]; TMPD1[32,32] = Rn_VPR64.2S[32,32] - Rm_VPR64.2S[32,32]; + # simd infix TMPD2 = Rm_VPR64.2S - Rn_VPR64.2S on lane size 4 TMPD2[0,32] = Rm_VPR64.2S[0,32] - Rn_VPR64.2S[0,32]; TMPD2[32,32] = Rm_VPR64.2S[32,32] - Rn_VPR64.2S[32,32]; + # simd infix TMPD2 = TMPD2 * 2:4 on lane size 4 TMPD2[0,32] = TMPD2[0,32] * 2:4; TMPD2[32,32] = TMPD2[32,32] * 2:4; + # simd infix TMPD3 = Rn_VPR64.2S s< Rm_VPR64.2S on lane size 4 TMPD3[0,32] = zext(Rn_VPR64.2S[0,32] s< Rm_VPR64.2S[0,32]); TMPD3[32,32] = zext(Rn_VPR64.2S[32,32] s< Rm_VPR64.2S[32,32]); + # simd infix TMPD2 = TMPD2 * TMPD3 on lane size 4 TMPD2[0,32] = TMPD2[0,32] * TMPD3[0,32]; TMPD2[32,32] = TMPD2[32,32] * TMPD3[32,32]; + # simd infix Rd_VPR64.2S = TMPD1 + TMPD2 on lane size 4 Rd_VPR64.2S[0,32] = TMPD1[0,32] + TMPD2[0,32]; Rd_VPR64.2S[32,32] = TMPD1[32,32] + TMPD2[32,32]; + zext_zd(Zd); # zero upper 24 bytes of Zd } @@ -13011,7 +14393,42 @@ is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR64.2S :sabd Rd_VPR64.4H, Rn_VPR64.4H, Rm_VPR64.4H is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR64.4H & b_1115=0xe & b_1010=1 & Rn_VPR64.4H & Rd_VPR64.4H & Zd { - Rd_VPR64.4H = NEON_sabd(Rn_VPR64.4H, Rm_VPR64.4H, 2:1); + # simd infix TMPD1 = Rn_VPR64.4H - Rm_VPR64.4H on lane size 2 + TMPD1[0,16] = Rn_VPR64.4H[0,16] - Rm_VPR64.4H[0,16]; + TMPD1[16,16] = Rn_VPR64.4H[16,16] - Rm_VPR64.4H[16,16]; + TMPD1[32,16] = Rn_VPR64.4H[32,16] - Rm_VPR64.4H[32,16]; + TMPD1[48,16] = Rn_VPR64.4H[48,16] - Rm_VPR64.4H[48,16]; + + # simd infix TMPD2 = Rm_VPR64.4H - Rn_VPR64.4H on lane size 2 + TMPD2[0,16] = Rm_VPR64.4H[0,16] - Rn_VPR64.4H[0,16]; + TMPD2[16,16] = Rm_VPR64.4H[16,16] - Rn_VPR64.4H[16,16]; + TMPD2[32,16] = Rm_VPR64.4H[32,16] - Rn_VPR64.4H[32,16]; + TMPD2[48,16] = Rm_VPR64.4H[48,16] - Rn_VPR64.4H[48,16]; + + # simd infix TMPD2 = TMPD2 * 2:2 on lane size 2 + TMPD2[0,16] = TMPD2[0,16] * 2:2; + TMPD2[16,16] = TMPD2[16,16] * 2:2; + TMPD2[32,16] = TMPD2[32,16] * 2:2; + TMPD2[48,16] = TMPD2[48,16] * 2:2; + + # simd infix TMPD3 = Rn_VPR64.4H s< Rm_VPR64.4H on lane size 2 + TMPD3[0,16] = zext(Rn_VPR64.4H[0,16] s< Rm_VPR64.4H[0,16]); + TMPD3[16,16] = zext(Rn_VPR64.4H[16,16] s< Rm_VPR64.4H[16,16]); + TMPD3[32,16] = zext(Rn_VPR64.4H[32,16] s< Rm_VPR64.4H[32,16]); + TMPD3[48,16] = zext(Rn_VPR64.4H[48,16] s< Rm_VPR64.4H[48,16]); + + # simd infix TMPD2 = TMPD2 * TMPD3 on lane size 2 + TMPD2[0,16] = TMPD2[0,16] * TMPD3[0,16]; + TMPD2[16,16] = TMPD2[16,16] * TMPD3[16,16]; + TMPD2[32,16] = TMPD2[32,16] * TMPD3[32,16]; + TMPD2[48,16] = TMPD2[48,16] * TMPD3[48,16]; + + # simd infix Rd_VPR64.4H = TMPD1 + TMPD2 on lane size 2 + Rd_VPR64.4H[0,16] = TMPD1[0,16] + TMPD2[0,16]; + Rd_VPR64.4H[16,16] = TMPD1[16,16] + TMPD2[16,16]; + Rd_VPR64.4H[32,16] = TMPD1[32,16] + TMPD2[32,16]; + Rd_VPR64.4H[48,16] = TMPD1[48,16] + TMPD2[48,16]; + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.226 SABD page C7-2534 line 148264 MATCH x0e207400/mask=xbf20fc00 @@ -13022,7 +14439,43 @@ is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR64.4H :sabd Rd_VPR128.4S, Rn_VPR128.4S, Rm_VPR128.4S is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR128.4S & b_1115=0xe & b_1010=1 & Rn_VPR128.4S & Rd_VPR128.4S & Zd { - Rd_VPR128.4S = NEON_sabd(Rn_VPR128.4S, Rm_VPR128.4S, 4:1); + # simd infix TMPQ1 = Rn_VPR128.4S - Rm_VPR128.4S on lane size 4 + TMPQ1[0,32] = Rn_VPR128.4S[0,32] - Rm_VPR128.4S[0,32]; + TMPQ1[32,32] = Rn_VPR128.4S[32,32] - Rm_VPR128.4S[32,32]; + TMPQ1[64,32] = Rn_VPR128.4S[64,32] - Rm_VPR128.4S[64,32]; + TMPQ1[96,32] = Rn_VPR128.4S[96,32] - Rm_VPR128.4S[96,32]; + + # simd infix TMPQ2 = Rm_VPR128.4S - Rn_VPR128.4S on lane size 4 + TMPQ2[0,32] = Rm_VPR128.4S[0,32] - Rn_VPR128.4S[0,32]; + TMPQ2[32,32] = Rm_VPR128.4S[32,32] - Rn_VPR128.4S[32,32]; + TMPQ2[64,32] = Rm_VPR128.4S[64,32] - Rn_VPR128.4S[64,32]; + TMPQ2[96,32] = Rm_VPR128.4S[96,32] - Rn_VPR128.4S[96,32]; + + # simd infix TMPQ2 = TMPQ2 * 2:4 on lane size 4 + TMPQ2[0,32] = TMPQ2[0,32] * 2:4; + TMPQ2[32,32] = TMPQ2[32,32] * 2:4; + TMPQ2[64,32] = TMPQ2[94,32] * 2:4; + TMPQ2[96,32] = TMPQ2[96,32] * 2:4; + + # simd infix TMPQ3 = Rn_VPR128.4S s< Rm_VPR128.4S on lane size 4 + TMPQ3[0,32] = zext(Rn_VPR128.4S[0,32] s< Rm_VPR128.4S[0,32]); + TMPQ3[32,32] = zext(Rn_VPR128.4S[32,32] s< Rm_VPR128.4S[32,32]); + TMPQ3[64,32] = zext(Rn_VPR128.4S[64,32] s< Rm_VPR128.4S[64,32]); + TMPQ3[96,32] = zext(Rn_VPR128.4S[96,32] s< Rm_VPR128.4S[96,32]); + + # simd infix TMPQ2 = TMPQ2 * TMPQ3 on lane size 4 + TMPQ2[0,32] = TMPQ2[0,32] * TMPQ3[0,32]; + TMPQ2[32,32] = TMPQ2[32,32] * TMPQ3[32,32]; + TMPQ2[64,32] = TMPQ2[64,32] * TMPQ3[64,32]; + TMPQ2[96,32] = TMPQ2[96,32] * TMPQ3[96,32]; + + # simd infix Rd_VPR128.4S = TMPQ1 + TMPQ2 on lane size 4 + Rd_VPR128.4S[0,32] = TMPQ1[0,32] + TMPQ2[0,32]; + Rd_VPR128.4S[32,32] = TMPQ1[32,32] + TMPQ2[32,32]; + Rd_VPR128.4S[64,32] = TMPQ1[64,32] + TMPQ2[64,32]; + Rd_VPR128.4S[96,32] = TMPQ1[96,32] + TMPQ2[96,32]; + + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.226 SABD page C7-2534 line 148264 MATCH x0e207400/mask=xbf20fc00 @@ -13033,7 +14486,67 @@ is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=2 & b_2121=1 & Rm_VPR128.4S :sabd Rd_VPR64.8B, Rn_VPR64.8B, Rm_VPR64.8B is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_2121=1 & Rm_VPR64.8B & b_1115=0xe & b_1010=1 & Rn_VPR64.8B & Rd_VPR64.8B & Zd { - Rd_VPR64.8B = NEON_sabd(Rn_VPR64.8B, Rm_VPR64.8B, 1:1); + # simd infix TMPD1 = Rn_VPR64.8B - Rm_VPR64.8B on lane size 1 + TMPD1[0,8] = Rn_VPR64.8B[0,8] - Rm_VPR64.8B[0,8]; + TMPD1[8,8] = Rn_VPR64.8B[8,8] - Rm_VPR64.8B[8,8]; + TMPD1[16,8] = Rn_VPR64.8B[16,8] - Rm_VPR64.8B[16,8]; + TMPD1[24,8] = Rn_VPR64.8B[24,8] - Rm_VPR64.8B[24,8]; + TMPD1[32,8] = Rn_VPR64.8B[32,8] - Rm_VPR64.8B[32,8]; + TMPD1[40,8] = Rn_VPR64.8B[40,8] - Rm_VPR64.8B[40,8]; + TMPD1[48,8] = Rn_VPR64.8B[48,8] - Rm_VPR64.8B[48,8]; + TMPD1[56,8] = Rn_VPR64.8B[56,8] - Rm_VPR64.8B[56,8]; + + # simd infix TMPD2 = Rm_VPR64.8B - Rn_VPR64.8B on lane size 1 + TMPD2[0,8] = Rm_VPR64.8B[0,8] - Rn_VPR64.8B[0,8]; + TMPD2[8,8] = Rm_VPR64.8B[8,8] - Rn_VPR64.8B[8,8]; + TMPD2[16,8] = Rm_VPR64.8B[16,8] - Rn_VPR64.8B[16,8]; + TMPD2[24,8] = Rm_VPR64.8B[24,8] - Rn_VPR64.8B[24,8]; + TMPD2[32,8] = Rm_VPR64.8B[32,8] - Rn_VPR64.8B[32,8]; + TMPD2[40,8] = Rm_VPR64.8B[40,8] - Rn_VPR64.8B[40,8]; + TMPD2[48,8] = Rm_VPR64.8B[48,8] - Rn_VPR64.8B[48,8]; + TMPD2[56,8] = Rm_VPR64.8B[56,8] - Rn_VPR64.8B[56,8]; + + # simd infix TMPD2 = TMPD2 * 2:1 on lane size 1 + TMPD2[0,8] = TMPD2[0,8] * 2:1; + TMPD2[8,8] = TMPD2[8,8] * 2:1; + TMPD2[16,8] = TMPD2[16,8] * 2:1; + TMPD2[24,8] = TMPD2[24,8] * 2:1; + TMPD2[32,8] = TMPD2[32,8] * 2:1; + TMPD2[40,8] = TMPD2[40,8] * 2:1; + TMPD2[48,8] = TMPD2[48,8] * 2:1; + TMPD2[56,8] = TMPD2[56,8] * 2:1; + + # simd infix TMPD3 = Rn_VPR64.8B s< Rm_VPR64.8B on lane size 1 + TMPD3[0,8] = zext(Rn_VPR64.8B[0,8] s< Rm_VPR64.8B[0,8]); + TMPD3[8,8] = zext(Rn_VPR64.8B[8,8] s< Rm_VPR64.8B[8,8]); + TMPD3[16,8] = zext(Rn_VPR64.8B[16,8] s< Rm_VPR64.8B[16,8]); + TMPD3[24,8] = zext(Rn_VPR64.8B[24,8] s< Rm_VPR64.8B[24,8]); + TMPD3[32,8] = zext(Rn_VPR64.8B[32,8] s< Rm_VPR64.8B[32,8]); + TMPD3[40,8] = zext(Rn_VPR64.8B[40,8] s< Rm_VPR64.8B[40,8]); + TMPD3[48,8] = zext(Rn_VPR64.8B[48,8] s< Rm_VPR64.8B[48,8]); + TMPD3[56,8] = zext(Rn_VPR64.8B[56,8] s< Rm_VPR64.8B[56,8]); + + # simd infix TMPD2 = TMPD2 * TMPD3 on lane size 1 + TMPD2[0,8] = TMPD2[0,8] * TMPD3[0,8]; + TMPD2[8,8] = TMPD2[8,8] * TMPD3[8,8]; + TMPD2[16,8] = TMPD2[16,8] * TMPD3[16,8]; + TMPD2[24,8] = TMPD2[24,8] * TMPD3[24,8]; + TMPD2[32,8] = TMPD2[32,8] * TMPD3[32,8]; + TMPD2[40,8] = TMPD2[40,8] * TMPD3[40,8]; + TMPD2[48,8] = TMPD2[48,8] * TMPD3[48,8]; + TMPD2[56,8] = TMPD2[56,8] * TMPD3[56,8]; + + # simd infix Rd_VPR64.8B = TMPD1 + TMPD2 on lane size 1 + Rd_VPR64.8B[0,8] = TMPD1[0,8] + TMPD2[0,8]; + Rd_VPR64.8B[8,8] = TMPD1[8,8] + TMPD2[8,8]; + Rd_VPR64.8B[16,8] = TMPD1[16,8] + TMPD2[16,8]; + Rd_VPR64.8B[24,8] = TMPD1[24,8] + TMPD2[24,8]; + Rd_VPR64.8B[32,8] = TMPD1[32,8] + TMPD2[32,8]; + Rd_VPR64.8B[40,8] = TMPD1[40,8] + TMPD2[40,8]; + Rd_VPR64.8B[48,8] = TMPD1[48,8] + TMPD2[48,8]; + Rd_VPR64.8B[56,8] = TMPD1[56,8] + TMPD2[56,8]; + + zext_zd(Zd); # zero upper 24 bytes of Zd } # C7.2.226 SABD page C7-2534 line 148264 MATCH x0e207400/mask=xbf20fc00 @@ -13044,7 +14557,67 @@ is b_3131=0 & q=0 & u=0 & b_2428=0xe & advSIMD3.size=0 & b_2121=1 & Rm_VPR64.8B :sabd Rd_VPR128.8H, Rn_VPR128.8H, Rm_VPR128.8H is b_3131=0 & q=1 & u=0 & b_2428=0xe & advSIMD3.size=1 & b_2121=1 & Rm_VPR128.8H & b_1115=0xe & b_1010=1 & Rn_VPR128.8H & Rd_VPR128.8H & Zd { - Rd_VPR128.8H = NEON_sabd(Rn_VPR128.8H, Rm_VPR128.8H, 2:1); + # simd infix TMPQ1 = Rn_VPR128.8H - Rm_VPR128.8H on lane size 2 + TMPQ1[0,16] = Rn_VPR128.8H[0,16] - Rm_VPR128.8H[0,16]; + TMPQ1[16,16] = Rn_VPR128.8H[16,16] - Rm_VPR128.8H[16,16]; + TMPQ1[32,16] = Rn_VPR128.8H[32,16] - Rm_VPR128.8H[32,16]; + TMPQ1[48,16] = Rn_VPR128.8H[48,16] - Rm_VPR128.8H[48,16]; + TMPQ1[64,16] = Rn_VPR128.8H[64,16] - Rm_VPR128.8H[64,16]; + TMPQ1[80,16] = Rn_VPR128.8H[80,16] - Rm_VPR128.8H[80,16]; + TMPQ1[96,16] = Rn_VPR128.8H[96,16] - Rm_VPR128.8H[96,16]; + TMPQ1[112,16] = Rn_VPR128.8H[112,16] - Rm_VPR128.8H[112,16]; + + # simd infix TMPQ2 = Rm_VPR128.8H - Rn_VPR128.8H on lane size 2 + TMPQ2[0,16] = Rm_VPR128.8H[0,16] - Rn_VPR128.8H[0,16]; + TMPQ2[16,16] = Rm_VPR128.8H[16,16] - Rn_VPR128.8H[16,16]; + TMPQ2[32,16] = Rm_VPR128.8H[32,16] - Rn_VPR128.8H[32,16]; + TMPQ2[48,16] = Rm_VPR128.8H[48,16] - Rn_VPR128.8H[48,16]; + TMPQ2[64,16] = Rm_VPR128.8H[64,16] - Rn_VPR128.8H[64,16]; + TMPQ2[80,16] = Rm_VPR128.8H[80,16] - Rn_VPR128.8H[80,16]; + TMPQ2[96,16] = Rm_VPR128.8H[96,16] - Rn_VPR128.8H[96,16]; + TMPQ2[112,16] = Rm_VPR128.8H[112,16] - Rn_VPR128.8H[112,16]; + + # simd infix TMPQ2 = TMPQ2 * 2:2 on lane size 2 + TMPQ2[0,16] = TMPQ2[0,16] * 2:2; + TMPQ2[16,16] = TMPQ2[16,16] * 2:2; + TMPQ2[32,16] = TMPQ2[32,16] * 2:2; + TMPQ2[48,16] = TMPQ2[48,16] * 2:2; + TMPQ2[64,16] = TMPQ2[64,16] * 2:2; + TMPQ2[80,16] = TMPQ2[80,16] * 2:2; + TMPQ2[96,16] = TMPQ2[96,16] * 2:2; + TMPQ2[112,16] = TMPQ2[112,16] * 2:2; + + # simd infix TMPQ3 = Rn_VPR128.8H s< Rm_VPR128.8H on lane size 2 + TMPQ3[0,16] = zext(Rn_VPR128.8H[0,16] s< Rm_VPR128.8H[0,16]); + TMPQ3[16,16] = zext(Rn_VPR128.8H[16,16] s< Rm_VPR128.8H[16,16]); + TMPQ3[32,16] = zext(Rn_VPR128.8H[32,16] s< Rm_VPR128.8H[32,16]); + TMPQ3[48,16] = zext(Rn_VPR128.8H[48,16] s< Rm_VPR128.8H[48,16]); + TMPQ3[64,16] = zext(Rn_VPR128.8H[64,16] s< Rm_VPR128.8H[64,16]); + TMPQ3[80,16] = zext(Rn_VPR128.8H[80,16] s< Rm_VPR128.8H[80,16]); + TMPQ3[96,16] = zext(Rn_VPR128.8H[96,16] s< Rm_VPR128.8H[96,16]); + TMPQ3[112,16] = zext(Rn_VPR128.8H[112,16] s< Rm_VPR128.8H[112,16]); + + # simd infix TMPQ2 = TMPQ2 * TMPQ3 on lane size 2 + TMPQ2[0,16] = TMPQ2[0,16] * TMPQ3[0,16]; + TMPQ2[16,16] = TMPQ2[16,16] * TMPQ3[16,16]; + TMPQ2[32,16] = TMPQ2[32,16] * TMPQ3[32,16]; + TMPQ2[48,16] = TMPQ2[48,16] * TMPQ3[48,16]; + TMPQ2[64,16] = TMPQ2[64,16] * TMPQ3[64,16]; + TMPQ2[80,16] = TMPQ2[80,16] * TMPQ3[80,16]; + TMPQ2[96,16] = TMPQ2[96,16] * TMPQ3[96,16]; + TMPQ2[112,16] = TMPQ2[112,16] * TMPQ3[112,16]; + + # simd infix Rd_VPR128.8H = TMPQ1 + TMPQ2 on lane size 2 + Rd_VPR128.8H[0,16] = TMPQ1[0,16] + TMPQ2[0,16]; + Rd_VPR128.8H[16,16] = TMPQ1[16,16] + TMPQ2[16,16]; + Rd_VPR128.8H[32,16] = TMPQ1[32,16] + TMPQ2[32,16]; + Rd_VPR128.8H[48,16] = TMPQ1[48,16] + TMPQ2[48,16]; + Rd_VPR128.8H[64,16] = TMPQ1[64,16] + TMPQ2[64,16]; + Rd_VPR128.8H[80,16] = TMPQ1[80,16] + TMPQ2[80,16]; + Rd_VPR128.8H[96,16] = TMPQ1[96,16] + TMPQ2[96,16]; + Rd_VPR128.8H[112,16] = TMPQ1[112,16] + TMPQ2[112,16]; + + zext_zq(Zd); # zero upper 16 bytes of Zd } # C7.2.227 SABDL, SABDL2 page C7-2536 line 148366 MATCH x0e207000/mask=xbf20fc00 @@ -29752,72 +31325,200 @@ is b_2131=0b01101110010 & Rm_VPR128.8H & b_1015=0b111011 & Rn_VPR128.8H & Rd_VPR # x2e21e800/mask=xbfbffc00 NOT MATCHED BY ANY CONSTRUCTOR # b_0031=0.1011100.100001111010.......... -:frint32x -is b_3131=0b0 & Q & b_2329=0b1011100 & b_22 & b_1021=0b100001111010 & Rn & Rd -unimpl +:frint32x Rd_VPR64.2S, Rn_VPR64.2S +is b_3131=0b0 & Q=0 & b_2329=0b1011100 & b_22=0 & b_1021=0b100001111010 & Rn_VPR64.2S & Rd_VPR64.2S +{ + Rd_VPR64.2S[0,32] = trunc(Rn_VPR64.2S[0,32]); + Rd_VPR64.2S[32,32] = trunc(Rn_VPR64.2S[32,32]); +} + +:frint32x Rd_VPR128.4S, Rn_VPR128.4S +is b_3131=0b0 & Q=1 & b_2329=0b1011100 & b_22=0 & b_1021=0b100001111010 & Rn_VPR128.4S & Rd_VPR128.4S +{ + Rd_VPR128.4S[0,32] = trunc(Rn_VPR128.4S[0,32]); + Rd_VPR128.4S[32,32] = trunc(Rn_VPR128.4S[32,32]); + Rd_VPR128.4S[64,32] = trunc(Rn_VPR128.4S[64,32]); + Rd_VPR128.4S[96,32] = trunc(Rn_VPR128.4S[96,32]); +} + +:frint32x Rd_VPR128.2D, Rn_VPR128.2D +is b_3131=0b0 & Q=1 & b_2329=0b1011100 & b_22=1 & b_1021=0b100001111010 & Rn_VPR128.2D & Rd_VPR128.2D +{ + local result:4 = trunc(Rn_VPR128.2D[0,64]); + Rd_VPR128.2D[0,64] = zext(result); + result = trunc(Rn_VPR128.2D[64,64]); + Rd_VPR128.2D[64,64] = zext(result); +} # C7.2.148 FRINT32X (scalar) page C7-2355 line 137767 MATCH x1e28c000/mask=xffbffc00 # CONSTRUCT x1e28c000/mask=xffbffc00 MATCHED 1 DOCUMENTED OPCODES # x1e28c000/mask=xffbffc00 NOT MATCHED BY ANY CONSTRUCTOR # b_0031=000111100.101000110000.......... -:frint32x -is b_2331=0b000111100 & b_22 & b_1021=0b101000110000 & Rn & Rd -unimpl +:frint32x Rd_FPR32, Rn_FPR32 +is b_2331=0b000111100 & b_22=0 & b_1021=0b101000110000 & Rn_FPR32 & Rd_FPR32 +{ + Rd_FPR32 = trunc(Rn_FPR32); +} + +:frint32x Rd_FPR64, Rn_FPR64 +is b_2331=0b000111100 & b_22=1 & b_1021=0b101000110000 & Rn_FPR64 & Rd_FPR64 +{ + local result:4 = trunc(Rn_FPR64); + Rd_FPR64 = zext(result); +} # C7.2.149 FRINT32Z (vector) page C7-2357 line 137862 MATCH x0e21e800/mask=xbfbffc00 # CONSTRUCT x0e21e800/mask=xbfbffc00 MATCHED 1 DOCUMENTED OPCODES # x0e21e800/mask=xbfbffc00 NOT MATCHED BY ANY CONSTRUCTOR # b_0031=0.0011100.100001111010.......... -:frint32z -is b_3131=0b0 & Q & b_2329=0b0011100 & b_22 & b_1021=0b100001111010 & Rn & Rd -unimpl +:frint32z Rd_VPR64.2S, Rn_VPR64.2S +is b_3131=0b0 & Q=0 & b_2329=0b0011100 & b_22=0 & b_1021=0b100001111010 & Rn_VPR64.2S & Rd_VPR64.2S +{ + Rd_VPR64.2S[0,32] = trunc(Rn_VPR64.2S[0,32]); + Rd_VPR64.2S[32,32] = trunc(Rn_VPR64.2S[32,32]); +} + +:frint32z Rd_VPR128.4S, Rn_VPR128.4S +is b_3131=0b0 & Q=1 & b_2329=0b0011100 & b_22=0 & b_1021=0b100001111010 & Rn_VPR128.4S & Rd_VPR128.4S +{ + Rd_VPR128.4S[0,32] = trunc(Rn_VPR128.4S[0,32]); + Rd_VPR128.4S[32,32] = trunc(Rn_VPR128.4S[32,32]); + Rd_VPR128.4S[64,32] = trunc(Rn_VPR128.4S[64,32]); + Rd_VPR128.4S[96,32] = trunc(Rn_VPR128.4S[96,32]); +} + +:frint32z Rd_VPR128.2D, Rn_VPR128.2D +is b_3131=0b0 & Q=1 & b_2329=0b0011100 & b_22=1 & b_1021=0b100001111010 & Rn_VPR128.2D & Rd_VPR128.2D +{ + local result:4 = trunc(Rn_VPR128.2D[0,64]); + Rd_VPR128.2D[0,64] = zext(result); + result = trunc(Rn_VPR128.2D[64,64]); + Rd_VPR128.2D[64,64] = zext(result); +} # C7.2.150 FRINT32Z (scalar) page C7-2359 line 137950 MATCH x1e284000/mask=xffbffc00 # CONSTRUCT x1e284000/mask=xffbffc00 MATCHED 1 DOCUMENTED OPCODES # x1e284000/mask=xffbffc00 NOT MATCHED BY ANY CONSTRUCTOR # b_0031=000111100.101000010000.......... -:frint32z -is b_2331=0b000111100 & b_22 & b_1021=0b101000010000 & Rn & Rd -unimpl +:frint32z Rd_FPR32, Rn_FPR32 +is b_2331=0b000111100 & b_22=0 & b_1021=0b101000010000 & Rn_FPR32 & Rd_FPR32 +{ + Rd_FPR32 = trunc(Rn_FPR32); +} + +:frint32z Rd_FPR64, Rn_FPR64 +is b_2331=0b000111100 & b_22=1 & b_1021=0b101000010000 & Rn_FPR64 & Rd_FPR64 +{ + local result:4 = trunc(Rn_FPR64); + Rd_FPR64 = zext(result); +} # C7.2.151 FRINT64X (vector) page C7-2361 line 138043 MATCH x2e21f800/mask=xbfbffc00 # CONSTRUCT x2e21f800/mask=xbfbffc00 MATCHED 1 DOCUMENTED OPCODES # x2e21f800/mask=xbfbffc00 NOT MATCHED BY ANY CONSTRUCTOR # b_0031=0.1011100.100001111110.......... -:frint64x -is b_3131=0b0 & Q & b_2329=0b1011100 & b_22 & b_1021=0b100001111110 & Rn & Rd -unimpl +:frint64x Rd_VPR64.2S, Rn_VPR64.2S +is b_3131=0b0 & Q=0 & b_2329=0b1011100 & b_22=0 & b_1021=0b100001111110 & Rn_VPR64.2S & Rd_VPR64.2S +{ + local result:8 = trunc(Rn_VPR64.2S[0,32]); + Rd_VPR64.2S[0,32] = result[0,32]; + result = trunc(Rn_VPR64.2S[32,32]); + Rd_VPR64.2S[32,32] = result[0,32]; +} + +:frint64x Rd_VPR128.4S, Rn_VPR128.4S +is b_3131=0b0 & Q=1 & b_2329=0b1011100 & b_22=0 & b_1021=0b100001111110 & Rn_VPR128.4S & Rd_VPR128.4S +{ + local result:8 = trunc(Rn_VPR128.4S[0,32]); + Rd_VPR128.4S[0,32] = result[0,32]; + result = trunc(Rn_VPR128.4S[32,32]); + Rd_VPR128.4S[32,32] = result[0,32]; + result = trunc(Rn_VPR128.4S[64,32]); + Rd_VPR128.4S[64,32] = result[0,32]; + result = trunc(Rn_VPR128.4S[96,32]); + Rd_VPR128.4S[96,32] = result[0,32]; +} + +:frint64x Rd_VPR128.2D, Rn_VPR128.2D +is b_3131=0b0 & Q=1 & b_2329=0b1011100 & b_22=1 & b_1021=0b100001111110 & Rn_VPR128.2D & Rd_VPR128.2D +{ + Rd_VPR128.2D[0,64] = trunc(Rn_VPR128.2D[0,64]); + Rd_VPR128.2D[64,64] = trunc(Rn_VPR128.2D[64,64]); +} # C7.2.152 FRINT64X (scalar) page C7-2363 line 138132 MATCH x1e29c000/mask=xffbffc00 # CONSTRUCT x1e29c000/mask=xffbffc00 MATCHED 1 DOCUMENTED OPCODES # x1e29c000/mask=xffbffc00 NOT MATCHED BY ANY CONSTRUCTOR # b_0031=000111100.101001110000.......... -:frint64x -is b_2331=0b000111100 & b_22 & b_1021=0b101001110000 & Rn & Rd -unimpl +:frint64x Rd_FPR32, Rn_FPR32 +is b_2331=0b000111100 & b_22=0 & b_1021=0b101001110000 & Rn_FPR32 & Rd_FPR32 +{ + local result:8 = trunc(Rn_FPR32); + Rd_FPR32 = result[0,32]; +} + +:frint64x Rd_FPR64, Rn_FPR64 +is b_2331=0b000111100 & b_22=1 & b_1021=0b101001110000 & Rn_FPR64 & Rd_FPR64 +{ + Rd_FPR64 = trunc(Rn_FPR64); +} # C7.2.153 FRINT64Z (vector) page C7-2365 line 138227 MATCH x0e21f800/mask=xbfbffc00 # CONSTRUCT x0e21f800/mask=xbfbffc00 MATCHED 1 DOCUMENTED OPCODES # x0e21f800/mask=xbfbffc00 NOT MATCHED BY ANY CONSTRUCTOR # b_0031=0.0011100.100001111110.......... -:frint64z -is b_3131=0b0 & Q & b_2329=0b0011100 & b_22 & b_1021=0b100001111110 & Rn & Rd -unimpl +:frint64z Rd_VPR64.2S, Rn_VPR64.2S +is b_3131=0b0 & Q=0 & b_2329=0b0011100 & b_22=0 & b_1021=0b100001111110 & Rn_VPR64.2S & Rd_VPR64.2S +{ + local result:8 = trunc(Rn_VPR64.2S[0,32]); + Rd_VPR64.2S[0,32] = result[0,32]; + result = trunc(Rn_VPR64.2S[32,32]); + Rd_VPR64.2S[32,32] = result[0,32]; +} + +:frint64z Rd_VPR128.4S, Rn_VPR128.4S +is b_3131=0b0 & Q=1 & b_2329=0b0011100 & b_22=0 & b_1021=0b100001111110 & Rn_VPR128.4S & Rd_VPR128.4S +{ + local result:8 = trunc(Rn_VPR128.4S[0,32]); + Rd_VPR128.4S[0,32] = result[0,32]; + result = trunc(Rn_VPR128.4S[32,32]); + Rd_VPR128.4S[32,32] = result[0,32]; + result = trunc(Rn_VPR128.4S[64,32]); + Rd_VPR128.4S[64,32] = result[0,32]; + result = trunc(Rn_VPR128.4S[96,32]); + Rd_VPR128.4S[96,32] = result[0,32]; +} + +:frint64z Rd_VPR128.2D, Rn_VPR128.2D +is b_3131=0b0 & Q=1 & b_2329=0b0011100 & b_22=1 & b_1021=0b100001111110 & Rn_VPR128.2D & Rd_VPR128.2D +{ + Rd_VPR128.2D[0,64] = trunc(Rn_VPR128.2D[0,64]); + Rd_VPR128.2D[64,64] = trunc(Rn_VPR128.2D[64,64]); +} # C7.2.154 FRINT64Z (scalar) page C7-2367 line 138315 MATCH x1e294000/mask=xffbffc00 # CONSTRUCT x1e294000/mask=xffbffc00 MATCHED 1 DOCUMENTED OPCODES # x1e294000/mask=xffbffc00 NOT MATCHED BY ANY CONSTRUCTOR # b_0031=000111100.101001010000.......... -:frint64z -is b_2331=0b000111100 & b_22 & b_1021=0b101001010000 & Rn & Rd -unimpl +:frint64z Rd_FPR32, Rn_FPR32 +is b_2331=0b000111100 & b_22=0 & b_1021=0b101001010000 & Rn_FPR32 & Rd_FPR32 +{ + local result:8 = trunc(Rn_FPR32); + Rd_FPR32 = result[0,32]; +} + +:frint64z Rd_FPR64, Rn_FPR64 +is b_2331=0b000111100 & b_22=1 & b_1021=0b101001010000 & Rn_FPR64 & Rd_FPR64 +{ + Rd_FPR64 = trunc(Rn_FPR64); +} # C7.2.278 SMMLA (vector) page C7-2634 line 153703 MATCH x4e80a400/mask=xffe0fc00 # CONSTRUCT x4e80a400/mask=xffe0fc00 MATCHED 1 DOCUMENTED OPCODES diff --git a/Ghidra/Processors/RISCV/data/languages/riscv.rv32b.sinc b/Ghidra/Processors/RISCV/data/languages/riscv.rv32b.sinc index 41512c11c2..46852a2aea 100644 --- a/Ghidra/Processors/RISCV/data/languages/riscv.rv32b.sinc +++ b/Ghidra/Processors/RISCV/data/languages/riscv.rv32b.sinc @@ -52,13 +52,13 @@ #TODO fix op2026 :grevi rd, rs1, op2026 is op0006=0x13 & op1214=0x5 & op2731=0xd & op2026 & rd & rs1 unimpl -:max rd, rs1, rs2 is op0006=0x33 & op1214=0x5 & op2531=0x5 & rd & rs1 & rs2 unimpl +:max rd, rs1, rs2 is op0006=0x33 & op1214=0x6 & op2531=0x5 & rd & rs1 & rs2 unimpl :maxu rd, rs1, rs2 is op0006=0x33 & op1214=0x7 & op2531=0x5 & rd & rs1 & rs2 unimpl :min rd, rs1, rs2 is op0006=0x33 & op1214=0x4 & op2531=0x5 & rd & rs1 & rs2 unimpl -:minu rd, rs1, rs2 is op0006=0x33 & op1214=0x6 & op2531=0x5 & rd & rs1 & rs2 unimpl +:minu rd, rs1, rs2 is op0006=0x33 & op1214=0x5 & op2531=0x5 & rd & rs1 & rs2 unimpl :orn rd, rs1, rs2 is op0006=0x33 & op1214=0x6 & op2531=0x20 & rd & rs1 & rs2 unimpl