mirror of
https://github.com/RKX1209/nsemu.git
synced 2024-06-23 14:43:16 -04:00
Fixed type confusion of ldst offset
This commit is contained in:
parent
adde42797b
commit
4f66ecc9ef
|
@ -800,7 +800,7 @@ static void DisasLdstRegImm9(uint32_t insn, DisasCallback *cb,
|
|||
unsigned int rt,
|
||||
bool is_vector) {
|
||||
unsigned int rn = extract32(insn, 5, 5);
|
||||
unsigned int imm9 = sextract32(insn, 12, 9);
|
||||
uint64_t imm9 = sextract32(insn, 12, 9);
|
||||
unsigned int idx = extract32(insn, 10, 2);
|
||||
bool is_signed = false;
|
||||
bool is_store = false;
|
||||
|
@ -810,6 +810,8 @@ static void DisasLdstRegImm9(uint32_t insn, DisasCallback *cb,
|
|||
bool post_index;
|
||||
bool writeback;
|
||||
|
||||
debug_print ("ldst uimm9\n");
|
||||
|
||||
if (is_vector) {
|
||||
UnsupportedOp ("LDR/STR [base, #imm9] (SIMD&FP)");
|
||||
} else {
|
||||
|
@ -860,15 +862,15 @@ static void DisasLdstRegUnsignedImm(uint32_t insn, DisasCallback *cb,
|
|||
unsigned int rt,
|
||||
bool is_vector) {
|
||||
unsigned int rn = extract32(insn, 5, 5);
|
||||
unsigned int imm12 = extract32(insn, 10, 12);
|
||||
unsigned int offset;
|
||||
uint64_t imm12 = extract32(insn, 10, 12);
|
||||
uint64_t offset;
|
||||
|
||||
bool is_store;
|
||||
bool is_signed = false;
|
||||
bool is_extended = false;
|
||||
|
||||
debug_print ("ldst unsigned imm\n");
|
||||
if (is_vector) {
|
||||
/* LDR/STR [base, #simm12] (SIMD&FP) */
|
||||
/* LDR/STR [base, #uimm12] (SIMD&FP) */
|
||||
size |= (opc & 2) << 1;
|
||||
if (size > 4) {
|
||||
UnallocatedOp (insn);
|
||||
|
|
|
@ -347,6 +347,7 @@ void IntprCallback::ExtendReg(unsigned int rd_idx, unsigned int rn_idx, unsigned
|
|||
|
||||
/* Load/Store */
|
||||
static void _LoadReg(unsigned int rd_idx, uint64_t addr, int size, bool extend) {
|
||||
debug_print ("Read from addr:0x%lx(%d)\n", addr, size);
|
||||
if (size < 4) {
|
||||
X(rd_idx) = ARMv8::ReadU64 (addr);
|
||||
} else {
|
||||
|
@ -360,6 +361,7 @@ static void _LoadReg(unsigned int rd_idx, uint64_t addr, int size, bool extend)
|
|||
}
|
||||
|
||||
static void _StoreReg(unsigned int rd_idx, uint64_t addr, int size, bool extend) {
|
||||
debug_print ("Write to addr:0x%lx(%d)\n", addr, size);
|
||||
if (size < 4) {
|
||||
ARMv8::WriteU64 (addr, X(rd_idx));
|
||||
} else {
|
||||
|
|
Loading…
Reference in a new issue