+static RISCVException write_stimecmp(CPURISCVState *env, int csrno,
+ target_ulong val)
+{
+ RISCVCPU *cpu = env_archcpu(env);
+
+ if (riscv_cpu_mxl(env) == MXL_RV32) {
+ uint64_t stimecmp_hi = env->stimecmp >> 32;
+ env->stimecmp = (stimecmp_hi << 32) | (val & 0xFFFFFFFF);
+ } else {
+ env->stimecmp = val;
+ riscv_timer_write_timecmp(cpu, env->stimer, env->stimecmp, 0,
MIP_STIP);
+ }
+
+ return RISCV_EXCP_NONE;
+}
+
+static RISCVException write_stimecmph(CPURISCVState *env, int csrno,
+ target_ulong val)
+{
+ RISCVCPU *cpu = env_archcpu(env);
+ uint64_t timer_val = 0;
+
+ timer_val = (uint64_t)val << 32 | (env->stimecmp & 0xFFFFFFFF);
+ env->stimecmp = timer_val;
+ riscv_timer_write_timecmp(cpu, env->stimer, env->stimecmp, 0, MIP_STIP);
+
+ return RISCV_EXCP_NONE;
+}