target/hexagon: Add TCG overrides for int handler insts
Define TCG overrides for {c,}swi {c,s}iad, iassign{r,w}, {s,g}etimask instructions. Reviewed-by: Taylor Simpson <ltaylorsimpson@gmail.com> Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>
Brian Cain committed
Jun 22, 2026 at 15:28 UTC
0d22234518bd37a160d8a60036605701ec2fb311
3 files changed
+73
target/hexagon/gen_tcg_sys.h
+25
@@ -7,6 +7,31 @@
7
#ifndef HEXAGON_GEN_TCG_SYS_H
8
#define HEXAGON_GEN_TCG_SYS_H
9
10
+/* System mode instructions */
11
+#define fGEN_TCG_Y2_swi(SHORTCODE) \
12
+ gen_helper_swi(tcg_env, RsV)
13
+
14
+#define fGEN_TCG_Y2_cswi(SHORTCODE) \
15
+ gen_helper_cswi(tcg_env, RsV)
16
+
17
+#define fGEN_TCG_Y2_ciad(SHORTCODE) \
18
+ gen_helper_ciad(tcg_env, RsV)
19
+
20
+#define fGEN_TCG_Y4_siad(SHORTCODE) \
21
+ gen_helper_siad(tcg_env, RsV)
22
+
23
+#define fGEN_TCG_Y2_iassignw(SHORTCODE) \
24
+ gen_helper_iassignw(tcg_env, RsV)
25
+
26
+#define fGEN_TCG_Y2_iassignr(SHORTCODE) \
27
+ gen_helper_iassignr(RdV, tcg_env, RsV)
28
+
29
+#define fGEN_TCG_Y2_getimask(SHORTCODE) \
30
+ gen_helper_getimask(RdV, tcg_env, RsV)
31
+
32
+#define fGEN_TCG_Y2_setimask(SHORTCODE) \
33
+ gen_helper_setimask(tcg_env, PtV, RsV)
34
+
35
#define fGEN_TCG_Y2_setprio(SHORTCODE) \
36
gen_helper_setprio(tcg_env, PtV, RsV)
37
target/hexagon/helper.h
+8
@@ -109,6 +109,14 @@ DEF_HELPER_2(probe_hvx_stores, void, env, int)
109
DEF_HELPER_2(probe_pkt_scalar_hvx_stores, void, env, int)
110
111
#if !defined(CONFIG_USER_ONLY)
112
+DEF_HELPER_2(swi, void, env, i32)
113
+DEF_HELPER_2(cswi, void, env, i32)
114
+DEF_HELPER_2(ciad, void, env, i32)
115
+DEF_HELPER_2(siad, void, env, i32)
116
+DEF_HELPER_2(iassignw, void, env, i32)
117
+DEF_HELPER_2(iassignr, i32, env, i32)
118
+DEF_HELPER_2(getimask, i32, env, i32)
119
+DEF_HELPER_3(setimask, void, env, i32, i32)
120
DEF_HELPER_2(sreg_read, i32, env, i32)
121
DEF_HELPER_2(sreg_read_pair, i64, env, i32)
122
DEF_HELPER_2(greg_read, i32, env, i32)
target/hexagon/op_helper.c
+40
@@ -1390,6 +1390,46 @@ void HELPER(vwhist128qm)(CPUHexagonState *env, int32_t uiV)
1390
}
1391
1392
#ifndef CONFIG_USER_ONLY
1393
+void HELPER(ciad)(CPUHexagonState *env, uint32_t mask)
1394
+{
1395
+ g_assert_not_reached();
1396
+}
1397
+
1398
+void HELPER(siad)(CPUHexagonState *env, uint32_t mask)
1399
+{
1400
+ g_assert_not_reached();
1401
+}
1402
+
1403
+void HELPER(swi)(CPUHexagonState *env, uint32_t mask)
1404
+{
1405
+ g_assert_not_reached();
1406
+}
1407
+
1408
+void HELPER(cswi)(CPUHexagonState *env, uint32_t mask)
1409
+{
1410
+ g_assert_not_reached();
1411
+}
1412
+
1413
+void HELPER(iassignw)(CPUHexagonState *env, uint32_t src)
1414
+{
1415
+ g_assert_not_reached();
1416
+}
1417
+
1418
+uint32_t HELPER(iassignr)(CPUHexagonState *env, uint32_t src)
1419
+{
1420
+ g_assert_not_reached();
1421
+}
1422
+
1423
+uint32_t HELPER(getimask)(CPUHexagonState *env, uint32_t tid)
1424
+{
1425
+ g_assert_not_reached();
1426
+}
1427
+
1428
+void HELPER(setimask)(CPUHexagonState *env, uint32_t tid, uint32_t imask)
1429
+{
1430
+ g_assert_not_reached();
1431
+}
1432
+
1433
void HELPER(sreg_write_masked)(CPUHexagonState *env, uint32_t reg, uint32_t val)
1434
{
1435
g_assert_not_reached();