On 3/27/23 20:06, Song Gao wrote:
+void HELPER(vmskltz_b)(CPULoongArchState *env, uint32_t vd, uint32_t vj)
+{
+    VReg temp;
+    VReg *Vd = &(env->fpr[vd].vreg);
+    VReg *Vj = &(env->fpr[vj].vreg);
+
+    temp.D(0) = 0;
+    temp.D(1) = 0;
+    temp.H(0) = do_vmskltz_b(Vj->D(0));
+    temp.H(0) |= (do_vmskltz_b(Vj->D(1)) << 8);
+    Vd->D(0) = temp.D(0);
+    Vd->D(1) = 0;
+}

Better as uint16_t temp, instead of a full VReg.

+static uint64_t do_vmskltz_d(int64_t val)
+{
+    uint64_t m = 0x8000000000000000ULL;
+    uint64_t c =  val & m;
+    c |= c << 63;
+    return c >> 63;
+}

No mask or shift left required.


r~

Reply via email to