xref: /openbmc/qemu/target/arm/tcg/helper-sme.h (revision 67ce09b5443caf310649b5b003efe5b0d69e81a1)
1*67ce09b5SRichard Henderson /*
2*67ce09b5SRichard Henderson  *  AArch64 SME specific helper definitions
3*67ce09b5SRichard Henderson  *
4*67ce09b5SRichard Henderson  *  Copyright (c) 2022 Linaro, Ltd
5*67ce09b5SRichard Henderson  *
6*67ce09b5SRichard Henderson  * This library is free software; you can redistribute it and/or
7*67ce09b5SRichard Henderson  * modify it under the terms of the GNU Lesser General Public
8*67ce09b5SRichard Henderson  * License as published by the Free Software Foundation; either
9*67ce09b5SRichard Henderson  * version 2.1 of the License, or (at your option) any later version.
10*67ce09b5SRichard Henderson  *
11*67ce09b5SRichard Henderson  * This library is distributed in the hope that it will be useful,
12*67ce09b5SRichard Henderson  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13*67ce09b5SRichard Henderson  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14*67ce09b5SRichard Henderson  * Lesser General Public License for more details.
15*67ce09b5SRichard Henderson  *
16*67ce09b5SRichard Henderson  * You should have received a copy of the GNU Lesser General Public
17*67ce09b5SRichard Henderson  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
18*67ce09b5SRichard Henderson  */
19*67ce09b5SRichard Henderson 
20*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_3(set_svcr, TCG_CALL_NO_RWG, void, env, i32, i32)
21*67ce09b5SRichard Henderson 
22*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_3(sme_zero, TCG_CALL_NO_RWG, void, env, i32, i32)
23*67ce09b5SRichard Henderson 
24*67ce09b5SRichard Henderson /* Move to/from vertical array slices, i.e. columns, so 'c'.  */
25*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_4(sme_mova_cz_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
26*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_4(sme_mova_zc_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
27*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_4(sme_mova_cz_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
28*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_4(sme_mova_zc_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
29*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_4(sme_mova_cz_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
30*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_4(sme_mova_zc_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
31*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_4(sme_mova_cz_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
32*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_4(sme_mova_zc_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
33*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_4(sme_mova_cz_q, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
34*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_4(sme_mova_zc_q, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
35*67ce09b5SRichard Henderson 
36*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1b_h, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
37*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1b_v, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
38*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1b_h_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
39*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1b_v_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
40*67ce09b5SRichard Henderson 
41*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1h_be_h, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
42*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1h_le_h, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
43*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1h_be_v, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
44*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1h_le_v, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
45*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1h_be_h_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
46*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1h_le_h_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
47*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1h_be_v_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
48*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1h_le_v_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
49*67ce09b5SRichard Henderson 
50*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1s_be_h, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
51*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1s_le_h, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
52*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1s_be_v, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
53*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1s_le_v, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
54*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1s_be_h_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
55*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1s_le_h_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
56*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1s_be_v_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
57*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1s_le_v_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
58*67ce09b5SRichard Henderson 
59*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1d_be_h, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
60*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1d_le_h, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
61*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1d_be_v, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
62*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1d_le_v, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
63*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1d_be_h_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
64*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1d_le_h_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
65*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1d_be_v_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
66*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1d_le_v_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
67*67ce09b5SRichard Henderson 
68*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1q_be_h, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
69*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1q_le_h, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
70*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1q_be_v, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
71*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1q_le_v, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
72*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1q_be_h_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
73*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1q_le_h_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
74*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1q_be_v_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
75*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_ld1q_le_v_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
76*67ce09b5SRichard Henderson 
77*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1b_h, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
78*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1b_v, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
79*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1b_h_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
80*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1b_v_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
81*67ce09b5SRichard Henderson 
82*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1h_be_h, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
83*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1h_le_h, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
84*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1h_be_v, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
85*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1h_le_v, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
86*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1h_be_h_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
87*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1h_le_h_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
88*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1h_be_v_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
89*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1h_le_v_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
90*67ce09b5SRichard Henderson 
91*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1s_be_h, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
92*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1s_le_h, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
93*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1s_be_v, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
94*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1s_le_v, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
95*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1s_be_h_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
96*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1s_le_h_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
97*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1s_be_v_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
98*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1s_le_v_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
99*67ce09b5SRichard Henderson 
100*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1d_be_h, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
101*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1d_le_h, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
102*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1d_be_v, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
103*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1d_le_v, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
104*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1d_be_h_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
105*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1d_le_h_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
106*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1d_be_v_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
107*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1d_le_v_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
108*67ce09b5SRichard Henderson 
109*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1q_be_h, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
110*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1q_le_h, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
111*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1q_be_v, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
112*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1q_le_v, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
113*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1q_be_h_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
114*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1q_le_h_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
115*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1q_be_v_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
116*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_st1q_le_v_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i32)
117*67ce09b5SRichard Henderson 
118*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_addha_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32)
119*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_addva_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32)
120*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_addha_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32)
121*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_5(sme_addva_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32)
122*67ce09b5SRichard Henderson 
123*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_7(sme_fmopa_h, TCG_CALL_NO_RWG,
124*67ce09b5SRichard Henderson                    void, ptr, ptr, ptr, ptr, ptr, ptr, i32)
125*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_7(sme_fmopa_s, TCG_CALL_NO_RWG,
126*67ce09b5SRichard Henderson                    void, ptr, ptr, ptr, ptr, ptr, ptr, i32)
127*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_7(sme_fmopa_d, TCG_CALL_NO_RWG,
128*67ce09b5SRichard Henderson                    void, ptr, ptr, ptr, ptr, ptr, ptr, i32)
129*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_6(sme_bfmopa, TCG_CALL_NO_RWG,
130*67ce09b5SRichard Henderson                    void, ptr, ptr, ptr, ptr, ptr, i32)
131*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_6(sme_smopa_s, TCG_CALL_NO_RWG,
132*67ce09b5SRichard Henderson                    void, ptr, ptr, ptr, ptr, ptr, i32)
133*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_6(sme_umopa_s, TCG_CALL_NO_RWG,
134*67ce09b5SRichard Henderson                    void, ptr, ptr, ptr, ptr, ptr, i32)
135*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_6(sme_sumopa_s, TCG_CALL_NO_RWG,
136*67ce09b5SRichard Henderson                    void, ptr, ptr, ptr, ptr, ptr, i32)
137*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_6(sme_usmopa_s, TCG_CALL_NO_RWG,
138*67ce09b5SRichard Henderson                    void, ptr, ptr, ptr, ptr, ptr, i32)
139*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_6(sme_smopa_d, TCG_CALL_NO_RWG,
140*67ce09b5SRichard Henderson                    void, ptr, ptr, ptr, ptr, ptr, i32)
141*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_6(sme_umopa_d, TCG_CALL_NO_RWG,
142*67ce09b5SRichard Henderson                    void, ptr, ptr, ptr, ptr, ptr, i32)
143*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_6(sme_sumopa_d, TCG_CALL_NO_RWG,
144*67ce09b5SRichard Henderson                    void, ptr, ptr, ptr, ptr, ptr, i32)
145*67ce09b5SRichard Henderson DEF_HELPER_FLAGS_6(sme_usmopa_d, TCG_CALL_NO_RWG,
146*67ce09b5SRichard Henderson                    void, ptr, ptr, ptr, ptr, ptr, i32)
147