@samitouri / QOSamiQemu / commits / 0d22234518

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();