Helper functions to invoke the write128fn and read128fn
methods of ARMCPRegInfo.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
target/arm/tcg/helper.h | 2 ++
target/arm/tcg/op_helper.c | 28 ++++++++++++++++++++++++++++
2 files changed, 30 insertions(+)
diff --git a/target/arm/tcg/helper.h b/target/arm/tcg/helper.h
index 4da32db902..82592d070d 100644
--- a/target/arm/tcg/helper.h
+++ b/target/arm/tcg/helper.h
@@ -90,6 +90,8 @@ DEF_HELPER_3(set_cp_reg, void, env, cptr, i32)
DEF_HELPER_2(get_cp_reg, i32, env, cptr)
DEF_HELPER_3(set_cp_reg64, void, env, cptr, i64)
DEF_HELPER_2(get_cp_reg64, i64, env, cptr)
+DEF_HELPER_3(set_cp_reg128, void, env, cptr, i128)
+DEF_HELPER_2(get_cp_reg128, i128, env, cptr)
DEF_HELPER_2(get_r13_banked, i32, env, i32)
DEF_HELPER_3(set_r13_banked, void, env, i32, i32)
diff --git a/target/arm/tcg/op_helper.c b/target/arm/tcg/op_helper.c
index 575e566280..a3ae175a45 100644
--- a/target/arm/tcg/op_helper.c
+++ b/target/arm/tcg/op_helper.c
@@ -1025,6 +1025,34 @@ uint64_t HELPER(get_cp_reg64)(CPUARMState *env, const void *rip)
return res;
}
+void HELPER(set_cp_reg128)(CPUARMState *env, const void *rip, Int128 value)
+{
+ const ARMCPRegInfo *ri = rip;
+
+ if (ri->type & ARM_CP_IO) {
+ bql_lock();
+ ri->write128fn(env, ri, value);
+ bql_unlock();
+ } else {
+ ri->write128fn(env, ri, value);
+ }
+}
+
+Int128 HELPER(get_cp_reg128)(CPUARMState *env, const void *rip)
+{
+ const ARMCPRegInfo *ri = rip;
+ Int128 res;
+
+ if (ri->type & ARM_CP_IO) {
+ bql_lock();
+ res = ri->read128fn(env, ri);
+ bql_unlock();
+ } else {
+ res = ri->read128fn(env, ri);
+ }
+ return res;
+}
+
void HELPER(pre_hvc)(CPUARMState *env)
{
ARMCPU *cpu = env_archcpu(env);
--
2.43.0