(V2QI "v2qi")])
(define_mode_attr MVE_vctp [(V16BI "8") (V8BI "16") (V4BI "32") (V2QI "64")])
+;; Assembly modifier for a const_int operand to narrow it to a
+;; specific mode. For vector modes this is the element size.
+;; Currently only supports SI and HI.
+
+(define_mode_attr asm_const_size [(SI "") (HI "L")
+ (V4SI "") (V2SI "")
+ (V8HI "L") (V4HI "L")])
+
;;----------------------------------------------------------------------------
;; Code attributes
;;----------------------------------------------------------------------------
VMVNQ_N))
]
"TARGET_HAVE_MVE"
- "<mve_insn>.i%#<V_sz_elem>\t%q0, %1"
+ "<mve_insn>.i%#<V_sz_elem>\t%q0, %<asm_const_size>1"
[(set (attr "mve_unpredicated_insn") (symbol_ref "CODE_FOR_mve_<mve_insn>q_n_<supf><mode>"))
(set_attr "type" "mve_move")
])
MVE_INT_N_BINARY_LOGIC))
]
"TARGET_HAVE_MVE"
- "<mve_insn>.i%#<V_sz_elem> %q0, %2"
+ "<mve_insn>.i%#<V_sz_elem> %q0, %<asm_const_size>2"
[(set (attr "mve_unpredicated_insn") (symbol_ref "CODE_FOR_mve_<mve_insn>q_n_<supf><mode>"))
(set_attr "type" "mve_move")
])
VMVNQ_M_N))
]
"TARGET_HAVE_MVE"
- "vpst\;<mve_insn>t.i%#<V_sz_elem>\t%q0, %2"
+ "vpst\;<mve_insn>t.i%#<V_sz_elem>\t%q0, %<asm_const_size>2"
[(set (attr "mve_unpredicated_insn") (symbol_ref "CODE_FOR_mve_<mve_insn>q_n_<supf><mode>"))
(set_attr "type" "mve_move")
(set_attr "length""8")])
MVE_INT_M_N_BINARY_LOGIC))
]
"TARGET_HAVE_MVE"
- "vpst\;<mve_insn>t.i%#<V_sz_elem>\t%q0, %2"
+ "vpst\;<mve_insn>t.i%#<V_sz_elem>\t%q0, %<asm_const_size>2"
[(set (attr "mve_unpredicated_insn") (symbol_ref "CODE_FOR_mve_<mve_insn>q_n_<supf><mode>"))
(set_attr "type" "mve_move")
(set_attr "length""8")])
--- /dev/null
+/* { dg-require-effective-target arm_v8_1m_mve_ok } */
+/* { dg-add-options arm_v8_1m_mve } */
+/* { dg-additional-options "-O2" } */
+
+#include <arm_mve.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+uint16x8_t test_1(uint16x8_t v11) {
+ return vbicq_n_u16(v11, 0x8000);
+}
+
+uint16x8_t test_2(uint16x8_t v11) {
+ return vorrq_n_u16(v11, 0x8000);
+}
+
+uint16x8_t test_3() {
+ return vmvnq_n_u16(0x8000);
+}
+
+mve_pred16_t pred;
+uint16x8_t test_4(uint16x8_t v11) {
+ return vbicq_m_n_u16(v11, 0x8000, pred);
+}
+
+uint16x8_t test_5(uint16x8_t v11) {
+ return vorrq_m_n_u16(v11, 0x8000, pred);
+}
+
+uint16x8_t test_6() {
+ return vmvnq_x_n_u16(0x8000, pred);
+}
+
+#ifdef __cplusplus
+}
+#endif