169 if (opcode == 0xB0) {
174 if ((opcode & 0xC0) == 0x00) {
175 uint32_t offset = (
static_cast<uint32_t
>(opcode & 0x3F) << 2U) + 4U;
179 else if ((opcode & 0xC0) == 0x40) {
180 uint32_t offset = (
static_cast<uint32_t
>(opcode & 0x3F) << 2U) + 4U;
184 else if ((opcode & 0xF0) == 0x80) {
185 uint8_t opcode_low = 0;
189 static_cast<uint16_t
>((
static_cast<uint16_t
>(opcode & 0x0F) << 8U) |
static_cast<uint16_t
>(opcode_low));
191 for (
int i = 0; i < 12; ++i) {
192 if ((reg_mask & (1U <<
static_cast<unsigned>(i))) != 0) {
194 if (space.read_bytes(io_sp, &val, 4)) {
195 uint32_t dwarf_reg =
static_cast<uint32_t
>(dwarf::arm32::r4) +
static_cast<uint32_t
>(i);
196 if (!reg_ctx.write(dwarf_reg, val))
205 else if ((opcode & 0xF0) == 0x90 && opcode != 0x9D && opcode != 0x9F) {
206 uint32_t reg_val = 0;
207 uint32_t reg_num =
static_cast<uint32_t
>(opcode & 0x0F);
208 if (!reg_ctx.read(reg_num, reg_val))
213 else if ((opcode & 0xF0) == 0xA0) {
214 uint8_t count = opcode & 0x07;
215 bool pop_lr = (opcode & 0x08) != 0;
217 for (
int i = 0; i <= count; ++i, io_sp += 4) {
219 if (space.read_bytes(io_sp, &val, 4)) {
220 uint32_t dwarf_reg =
static_cast<uint32_t
>(dwarf::arm32::r4) +
static_cast<uint32_t
>(i);
221 if (!reg_ctx.write(dwarf_reg, val))
228 if (space.read_bytes(io_sp, &val, 4)) {
229 if (!reg_ctx.write(
static_cast<uint32_t
>(dwarf::arm32::r14), val))
236 else if ((opcode & 0xF8) == 0xB8) {
237 uint8_t count = opcode & 0x07;
238 for (
int i = 0; i <= count; ++i, io_sp += 8) {
240 if (space.read_bytes(io_sp, &val, 8)) {
241 uint32_t dwarf_reg =
static_cast<uint32_t
>(dwarf::arm32::d0) + 8U +
static_cast<uint32_t
>(i);
242 if (!reg_ctx.write_raw(dwarf_reg, &val, 8))