@@ -11943,7 +11943,6 @@ arm_record_vdata_transfer_insn (insn_decode_record *arm_insn_r)
uint32_t bits_a, bit_c, bit_l, reg_t, reg_v;
uint32_t record_buf[4];
- const int num_regs = gdbarch_num_regs (arm_insn_r->gdbarch);
reg_t = bits (arm_insn_r->arm_insn, 12, 15);
reg_v = bits (arm_insn_r->arm_insn, 21, 23);
bits_a = bits (arm_insn_r->arm_insn, 21, 23);
@@ -11961,12 +11960,7 @@ arm_record_vdata_transfer_insn (insn_decode_record *arm_insn_r)
/* Handle VMOV instruction. */
if (bits_a == 0x00)
{
- if (bit (arm_insn_r->arm_insn, 20))
- record_buf[0] = reg_t;
- else
- record_buf[0] = num_regs + (bit (arm_insn_r->arm_insn, 7) |
- (reg_v << 1));
-
+ record_buf[0] = reg_t;
arm_insn_r->reg_rec_count = 1;
}
/* Handle VMRS instruction. */
@@ -11984,12 +11978,9 @@ arm_record_vdata_transfer_insn (insn_decode_record *arm_insn_r)
/* Handle VMOV instruction. */
if (bits_a == 0x00)
{
- if (bit (arm_insn_r->arm_insn, 20))
- record_buf[0] = reg_t;
- else
- record_buf[0] = num_regs + (bit (arm_insn_r->arm_insn, 7) |
- (reg_v << 1));
-
+ uint32_t reg_single;
+ reg_single = bit (arm_insn_r->arm_insn, 7) | (reg_v << 1);
+ record_buf[0] = ARM_D0_REGNUM + reg_single / 2;
arm_insn_r->reg_rec_count = 1;
}
/* Handle VMSR instruction. */
@@ -12042,7 +12033,6 @@ arm_record_exreg_ld_st_insn (insn_decode_record *arm_insn_r)
ULONGEST u_regval = 0;
struct regcache *reg_cache = arm_insn_r->regcache;
- const int num_regs = gdbarch_num_regs (arm_insn_r->gdbarch);
opcode = bits (arm_insn_r->arm_insn, 20, 24);
single_reg = bit (arm_insn_r->arm_insn, 8);
@@ -12064,9 +12054,17 @@ arm_record_exreg_ld_st_insn (insn_decode_record *arm_insn_r)
if (!single_reg)
{
- record_buf[0] = num_regs + reg_m;
- record_buf[1] = num_regs + reg_m + 1;
- arm_insn_r->reg_rec_count = 2;
+ if (reg_m & 0x01)
+ {
+ record_buf[0] = ARM_D0_REGNUM + reg_m / 2;
+ record_buf[1] = ARM_D0_REGNUM + (reg_m + 1) / 2;
+ arm_insn_r->reg_rec_count = 2;
+ }
+ else
+ {
+ record_buf[0] = ARM_D0_REGNUM + reg_m / 2;
+ arm_insn_r->reg_rec_count = 1;
+ }
}
else
{
@@ -12085,7 +12083,7 @@ arm_record_exreg_ld_st_insn (insn_decode_record *arm_insn_r)
reg_rn = bits (arm_insn_r->arm_insn, 16, 19);
regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
imm_off8 = bits (arm_insn_r->arm_insn, 0, 7);
- imm_off32 = imm_off8 << 24;
+ imm_off32 = imm_off8 << 2;
memory_count = imm_off8;
if (bit (arm_insn_r->arm_insn, 23))
@@ -12103,19 +12101,17 @@ arm_record_exreg_ld_st_insn (insn_decode_record *arm_insn_r)
{
if (!single_reg)
{
- record_buf_mem[memory_index] = start_address;
- record_buf_mem[memory_index + 1] = 4;
+ record_buf_mem[memory_index++] = 4;
+ record_buf_mem[memory_index++] = start_address;
start_address = start_address + 4;
- memory_index = memory_index + 2;
}
else
{
- record_buf_mem[memory_index] = start_address;
- record_buf_mem[memory_index + 1] = 4;
- record_buf_mem[memory_index + 2] = start_address + 4;
- record_buf_mem[memory_index + 3] = 4;
+ record_buf_mem[memory_index++] = 4;
+ record_buf_mem[memory_index++] = start_address;
+ record_buf_mem[memory_index++] = 4;
+ record_buf_mem[memory_index++] = start_address + 4;
start_address = start_address + 8;
- memory_index = memory_index + 4;
}
memory_count--;
}
@@ -12142,7 +12138,8 @@ arm_record_exreg_ld_st_insn (insn_decode_record *arm_insn_r)
while (reg_count > 0)
{
if (single_reg)
- record_buf[reg_index++] = num_regs + reg_vd + reg_count - 1;
+ record_buf[reg_index++] = ARM_D0_REGNUM +
+ (reg_vd + reg_count - 1) / 2;
else
record_buf[reg_index++] = ARM_D0_REGNUM + reg_vd + reg_count - 1;
@@ -12159,7 +12156,7 @@ arm_record_exreg_ld_st_insn (insn_decode_record *arm_insn_r)
reg_rn = bits (arm_insn_r->arm_insn, 16, 19);
regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
imm_off8 = bits (arm_insn_r->arm_insn, 0, 7);
- imm_off32 = imm_off8 << 24;
+ imm_off32 = imm_off8 << 2;
memory_count = imm_off8;
if (bit (arm_insn_r->arm_insn, 23))
@@ -12169,16 +12166,16 @@ arm_record_exreg_ld_st_insn (insn_decode_record *arm_insn_r)
if (single_reg)
{
- record_buf_mem[memory_index] = start_address;
- record_buf_mem[memory_index + 1] = 4;
+ record_buf_mem[memory_index++] = 4;
+ record_buf_mem[memory_index++] = start_address;
arm_insn_r->mem_rec_count = 1;
}
else
{
- record_buf_mem[memory_index] = start_address;
- record_buf_mem[memory_index + 1] = 4;
- record_buf_mem[memory_index + 2] = start_address + 4;
- record_buf_mem[memory_index + 3] = 4;
+ record_buf_mem[memory_index++] = 4;
+ record_buf_mem[memory_index++] = start_address;
+ record_buf_mem[memory_index++] = 4;
+ record_buf_mem[memory_index++] = start_address + 4;
arm_insn_r->mem_rec_count = 2;
}
}
@@ -12195,7 +12192,7 @@ arm_record_exreg_ld_st_insn (insn_decode_record *arm_insn_r)
else
{
reg_vd = (reg_vd << 1) | bit (arm_insn_r->arm_insn, 22);
- record_buf[0] = num_regs + reg_vd;
+ record_buf[0] = ARM_D0_REGNUM + reg_vd / 2;
}
arm_insn_r->reg_rec_count = 1;
}