diff options
Diffstat (limited to 'src/devices/cpu/rsp/vsubc.h')
-rw-r--r-- | src/devices/cpu/rsp/vsubc.h | 14 |
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); +} |