On 12/24/22 00:16, Song Gao wrote:
+static void do_vmskltz(vec_t *Vd, vec_t *Vj, int bit, int n)
+{
+    switch (bit) {
+    case 8:
+        Vd->H[0] |= ((0x80 & Vj->B[n]) == 0) << n;
+        break;
+    case 16:
+        Vd->H[0] |= ((0x8000 & Vj->H[n]) == 0) << n;
+        break;
+    case 32:
+        Vd->H[0] |= ((0x80000000 & Vj->W[n]) == 0) << n;
+        break;
+    case 64:
+        Vd->H[0] |= ((0x8000000000000000 & Vj->D[n]) == 0) << n;
+        break;
+    default:
+        g_assert_not_reached();
+    }
+}
+
+static void do_vmskgez(vec_t *Vd, vec_t *Vj, int bit, int n)
+{
+    Vd->H[0] |= !((0x80 & Vj->B[n]) == 0) << n;
+}
+
+static void do_vmsknz(vec_t *Vd, vec_t *Vj, int bit, int n)
+{
+    Vd->H[0] |=  (Vj->B[n] == 0) << n;
+}
The bit collection and compaction can be done with a set of integer shifts.
E.g. helper_cmpbe0 in target/alpha/int_helper.c.


r~

Reply via email to