summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/rsp/vsubc.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/rsp/vsubc.h')
-rw-r--r--src/devices/cpu/rsp/vsubc.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/devices/cpu/rsp/vsubc.h b/src/devices/cpu/rsp/vsubc.h
new file mode 100644
index 00000000000..8632b9462d9
--- /dev/null
+++ b/src/devices/cpu/rsp/vsubc.h
@@ -0,0 +1,14 @@
+// license:BSD-3-Clause
+// copyright-holders:Tyler J. Stachecki,Ryan Holtz
+
+inline rsp_vec_t vec_vsubc(rsp_vec_t vs, rsp_vec_t vt, rsp_vec_t zero, rsp_vec_t *eq, rsp_vec_t *sn)
+{
+ rsp_vec_t sat_udiff = _mm_subs_epu16(vs, vt);
+ rsp_vec_t equal = _mm_cmpeq_epi16(vs, vt);
+ rsp_vec_t sat_udiff_zero = _mm_cmpeq_epi16(sat_udiff, zero);
+
+ *eq = _mm_cmpeq_epi16(equal, zero);
+ *sn = _mm_andnot_si128(equal, sat_udiff_zero);
+
+ return _mm_sub_epi16(vs, vt);
+}