@samitouri / QOSamiQemu / commits / c7e290f893

target/hexagon: Implement {g,s}etimask helpers

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 c7e290f89393b717e12a81262c8a89417a1a981d
1 file changed +34 -2
target/hexagon/op_helper.c
+34 -2
@@ -1499,12 +1499,44 @@ void HELPER(resume)(CPUHexagonState *env, uint32_t mask)
1499
1500 uint32_t HELPER(getimask)(CPUHexagonState *env, uint32_t tid)
1501 {
1502 - g_assert_not_reached();
1502 + CPUState *cs;
1503 + BQL_LOCK_GUARD();
1504 + CPU_FOREACH(cs) {
1505 + HexagonCPU *found_cpu = HEXAGON_CPU(cs);
1506 + CPUHexagonState *found_env = &found_cpu->env;
1507 + if (found_env->threadId == tid) {
1508 + uint32_t imask = found_env->t_sreg[HEX_SREG_IMASK];
1509 + qemu_log_mask(CPU_LOG_INT, "%s: tid " TARGET_FMT_lx
1510 + " imask = 0x%" PRIx32 "\n", __func__,
1511 + env->threadId,
1512 + (uint32_t)GET_FIELD(IMASK_MASK, imask));
1513 + return GET_FIELD(IMASK_MASK, imask);
1514 + }
1515 + }
1516 + return 0;
1517 }
1518
1519 void HELPER(setimask)(CPUHexagonState *env, uint32_t tid, uint32_t imask)
1520 {
1507 - g_assert_not_reached();
1521 + CPUState *cs;
1522 +
1523 + BQL_LOCK_GUARD();
1524 + CPU_FOREACH(cs) {
1525 + HexagonCPU *found_cpu = HEXAGON_CPU(cs);
1526 + CPUHexagonState *found_env = &found_cpu->env;
1527 +
1528 + if (tid == found_env->threadId) {
1529 + SET_SYSTEM_FIELD(found_env, HEX_SREG_IMASK, IMASK_MASK, imask);
1530 + qemu_log_mask(CPU_LOG_INT, "%s: tid " TARGET_FMT_lx
1531 + " imask 0x%" PRIx32 "\n",
1532 + __func__, found_env->threadId, imask);
1533 + hex_interrupt_update(found_env);
1534 + return;
1535 + }
1536 + }
1537 + qemu_log_mask(LOG_GUEST_ERROR,
1538 + "setimask used with an invalid tid near PC: 0x%"
1539 + PRIx32 "\n", env->next_PC);
1540 }
1541
1542 void HELPER(sreg_write_masked)(CPUHexagonState *env, uint32_t reg, uint32_t val)