From 5503b977dd8e9b04b09283fdfdad1e87bd4cacce Mon Sep 17 00:00:00 2001 From: "Zone.N" Date: Wed, 11 Sep 2024 05:13:37 +0000 Subject: [PATCH] fix: overflow Signed-off-by: Zone.N --- src/kernel/arch/riscv64/include/cpu/regs.hpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/kernel/arch/riscv64/include/cpu/regs.hpp b/src/kernel/arch/riscv64/include/cpu/regs.hpp index 1f39fa54..49103e1f 100644 --- a/src/kernel/arch/riscv64/include/cpu/regs.hpp +++ b/src/kernel/arch/riscv64/include/cpu/regs.hpp @@ -1203,10 +1203,10 @@ class ReadWriteField : public ReadOnlyField, * @param value 新值 */ static __always_inline void Write(RegInfo::DataType value) { - uint64_t org_value = Reg::Read(); - uint64_t new_value = - (org_value & ~RegInfo::kBitMask) | - (((uint64_t)value << RegInfo::kBitOffset) & RegInfo::kBitMask); + auto org_value = Reg::Read(); + auto new_value = (org_value & ~RegInfo::kBitMask) | + (((decltype(org_value))value << RegInfo::kBitOffset) & + RegInfo::kBitMask); Reg::Write(new_value); } @@ -1216,10 +1216,10 @@ class ReadWriteField : public ReadOnlyField, * @return RegInfo::DataType 由寄存器规定的数据类型 */ static __always_inline RegInfo::DataType ReadWrite(RegInfo::DataType value) { - uint64_t org_value = Reg::Read(); - uint64_t new_value = - (org_value & ~RegInfo::kBitMask) | - (((uint64_t)value << RegInfo::kBitOffset) & RegInfo::kBitMask); + auto org_value = Reg::Read(); + auto new_value = (org_value & ~RegInfo::kBitMask) | + (((decltype(org_value))value << RegInfo::kBitOffset) & + RegInfo::kBitMask); Reg::Write(new_value); return (RegInfo::DataType)((org_value & RegInfo::kBitMask) >> RegInfo::kBitOffset);