diff options
Diffstat (limited to 'gdb/i386-tdep.c')
-rw-r--r-- | gdb/i386-tdep.c | 2084 |
1 files changed, 1042 insertions, 1042 deletions
diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c index b485f0b..806e608 100644 --- a/gdb/i386-tdep.c +++ b/gdb/i386-tdep.c @@ -490,11 +490,11 @@ i386_dbx_reg_to_regnum (struct gdbarch *gdbarch, int reg) if (reg >= 0 && reg <= 7) { /* General-purpose registers. The debug info calls %ebp - register 4, and %esp register 5. */ + register 4, and %esp register 5. */ if (reg == 4) - return 5; + return 5; else if (reg == 5) - return 4; + return 4; else return reg; } else if (reg >= 12 && reg <= 19) @@ -661,11 +661,11 @@ i386_absolute_jmp_p (const gdb_byte *insn) { /* jump near, absolute indirect (/4). */ if ((insn[1] & 0x38) == 0x20) - return 1; + return 1; /* jump far, absolute indirect (/5). */ if ((insn[1] & 0x38) == 0x28) - return 1; + return 1; } return 0; @@ -698,11 +698,11 @@ i386_absolute_call_p (const gdb_byte *insn) { /* Call near, absolute indirect (/2). */ if ((insn[1] & 0x38) == 0x10) - return 1; + return 1; /* Call far, absolute indirect (/3). */ if ((insn[1] & 0x38) == 0x18) - return 1; + return 1; } return 0; @@ -828,7 +828,7 @@ i386_displaced_step_copy_insn (struct gdbarch *gdbarch, if (debug_displaced) { fprintf_unfiltered (gdb_stdlog, "displaced: copy %s->%s: ", - paddress (gdbarch, from), paddress (gdbarch, to)); + paddress (gdbarch, from), paddress (gdbarch, to)); displaced_step_dump_bytes (gdb_stdlog, buf, len); } @@ -841,9 +841,9 @@ i386_displaced_step_copy_insn (struct gdbarch *gdbarch, void i386_displaced_step_fixup (struct gdbarch *gdbarch, - struct displaced_step_closure *closure_, - CORE_ADDR from, CORE_ADDR to, - struct regcache *regs) + struct displaced_step_closure *closure_, + CORE_ADDR from, CORE_ADDR to, + struct regcache *regs) { enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); @@ -861,9 +861,9 @@ i386_displaced_step_fixup (struct gdbarch *gdbarch, if (debug_displaced) fprintf_unfiltered (gdb_stdlog, - "displaced: fixup (%s, %s), " - "insn = 0x%02x 0x%02x ...\n", - paddress (gdbarch, from), paddress (gdbarch, to), + "displaced: fixup (%s, %s), " + "insn = 0x%02x 0x%02x ...\n", + paddress (gdbarch, from), paddress (gdbarch, to), insn[0], insn[1]); /* The list of issues to contend with here is taken from @@ -899,49 +899,49 @@ i386_displaced_step_fixup (struct gdbarch *gdbarch, regcache_cooked_read_unsigned (regs, I386_EIP_REGNUM, &orig_eip); /* A signal trampoline system call changes the %eip, resuming - execution of the main program after the signal handler has - returned. That makes them like 'return' instructions; we - shouldn't relocate %eip. - - But most system calls don't, and we do need to relocate %eip. - - Our heuristic for distinguishing these cases: if stepping - over the system call instruction left control directly after - the instruction, the we relocate --- control almost certainly - doesn't belong in the displaced copy. Otherwise, we assume - the instruction has put control where it belongs, and leave - it unrelocated. Goodness help us if there are PC-relative - system calls. */ + execution of the main program after the signal handler has + returned. That makes them like 'return' instructions; we + shouldn't relocate %eip. + + But most system calls don't, and we do need to relocate %eip. + + Our heuristic for distinguishing these cases: if stepping + over the system call instruction left control directly after + the instruction, the we relocate --- control almost certainly + doesn't belong in the displaced copy. Otherwise, we assume + the instruction has put control where it belongs, and leave + it unrelocated. Goodness help us if there are PC-relative + system calls. */ if (i386_syscall_p (insn, &insn_len) - && orig_eip != to + (insn - insn_start) + insn_len + && orig_eip != to + (insn - insn_start) + insn_len /* GDB can get control back after the insn after the syscall. Presumably this is a kernel bug. i386_displaced_step_copy_insn ensures its a nop, we add one to the length for it. */ - && orig_eip != to + (insn - insn_start) + insn_len + 1) - { - if (debug_displaced) - fprintf_unfiltered (gdb_stdlog, - "displaced: syscall changed %%eip; " - "not relocating\n"); - } + && orig_eip != to + (insn - insn_start) + insn_len + 1) + { + if (debug_displaced) + fprintf_unfiltered (gdb_stdlog, + "displaced: syscall changed %%eip; " + "not relocating\n"); + } else - { - ULONGEST eip = (orig_eip - insn_offset) & 0xffffffffUL; + { + ULONGEST eip = (orig_eip - insn_offset) & 0xffffffffUL; /* If we just stepped over a breakpoint insn, we don't backup the pc on purpose; this is to match behaviour without stepping. */ - regcache_cooked_write_unsigned (regs, I386_EIP_REGNUM, eip); + regcache_cooked_write_unsigned (regs, I386_EIP_REGNUM, eip); - if (debug_displaced) - fprintf_unfiltered (gdb_stdlog, - "displaced: " - "relocated %%eip from %s to %s\n", - paddress (gdbarch, orig_eip), + if (debug_displaced) + fprintf_unfiltered (gdb_stdlog, + "displaced: " + "relocated %%eip from %s to %s\n", + paddress (gdbarch, orig_eip), paddress (gdbarch, eip)); - } + } } /* If the instruction was PUSHFL, then the TF bit will be set in the @@ -964,10 +964,10 @@ i386_displaced_step_fixup (struct gdbarch *gdbarch, write_memory_unsigned_integer (esp, retaddr_len, byte_order, retaddr); if (debug_displaced) - fprintf_unfiltered (gdb_stdlog, - "displaced: relocated return addr at %s to %s\n", - paddress (gdbarch, esp), - paddress (gdbarch, retaddr)); + fprintf_unfiltered (gdb_stdlog, + "displaced: relocated return addr at %s to %s\n", + paddress (gdbarch, esp), + paddress (gdbarch, retaddr)); } } @@ -1148,7 +1148,7 @@ i386_follow_jump (struct gdbarch *gdbarch, CORE_ADDR pc) delta = read_memory_integer (pc + 2, 2, byte_order); /* Include the size of the jmp instruction (including the - 0x66 prefix). */ + 0x66 prefix). */ delta += 4; } else @@ -1182,8 +1182,8 @@ i386_analyze_struct_return (CORE_ADDR pc, CORE_ADDR current_pc, { /* Functions that return a structure or union start with: - popl %eax 0x58 - xchgl %eax, (%esp) 0x87 0x04 0x24 + popl %eax 0x58 + xchgl %eax, (%esp) 0x87 0x04 0x24 or xchgl %eax, 0(%esp) 0x87 0x44 0x24 0x00 (the System V compiler puts out the second `xchg' instruction, @@ -1233,13 +1233,13 @@ i386_skip_probe (CORE_ADDR pc) { /* A function may start with - pushl constant - call _probe + pushl constant + call _probe addl $4, %esp followed by - pushl %ebp + pushl %ebp etc. */ gdb_byte buf[8]; @@ -1868,13 +1868,13 @@ i386_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc) struct compunit_symtab *cust = find_pc_compunit_symtab (func_addr); /* LLVM backend (Clang/Flang) always emits a line note before the - prologue and another one after. We trust clang to emit usable - line notes. */ + prologue and another one after. We trust clang to emit usable + line notes. */ if (post_prologue_pc && (cust != NULL && COMPUNIT_PRODUCER (cust) != NULL && producer_is_llvm (COMPUNIT_PRODUCER (cust)))) - return std::max (start_pc, post_prologue_pc); + return std::max (start_pc, post_prologue_pc); } cache.locals = -1; @@ -1888,10 +1888,10 @@ i386_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc) to get the address of the global offset table (GOT) into register %ebx: - call 0x0 + call 0x0 popl %ebx - movl %ebx,x(%ebp) (optional) - addl y,%ebx + movl %ebx,x(%ebp) (optional) + addl y,%ebx This code is with the rest of the prologue (at the end of the function), so we have to skip it to get to the first real @@ -1923,7 +1923,7 @@ i386_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc) else /* Unexpected instruction. */ delta = 0; - if (target_read_code (pc + delta, &op, 1)) + if (target_read_code (pc + delta, &op, 1)) return pc; } @@ -2894,8 +2894,8 @@ i386_store_return_value (struct gdbarch *gdbarch, struct type *type, } /* Returning floating-point values is a bit tricky. Apart from - storing the return value in %st(0), we have to simulate the - state of the FPU at function return point. */ + storing the return value in %st(0), we have to simulate the + state of the FPU at function return point. */ /* Convert the value found in VALBUF to the extended floating-point format used by the FPU. This is probably @@ -2905,16 +2905,16 @@ i386_store_return_value (struct gdbarch *gdbarch, struct type *type, regcache->raw_write (I386_ST0_REGNUM, buf); /* Set the top of the floating-point register stack to 7. The - actual value doesn't really matter, but 7 is what a normal - function return would end up with if the program started out - with a freshly initialized FPU. */ + actual value doesn't really matter, but 7 is what a normal + function return would end up with if the program started out + with a freshly initialized FPU. */ regcache_raw_read_unsigned (regcache, I387_FSTAT_REGNUM (tdep), &fstat); fstat |= (7 << 11); regcache_raw_write_unsigned (regcache, I387_FSTAT_REGNUM (tdep), fstat); /* Mark %st(1) through %st(7) as empty. Since we set the top of - the floating-point register stack to 7, the appropriate value - for the tag word is 0x3fff. */ + the floating-point register stack to 7, the appropriate value + for the tag word is 0x3fff. */ regcache_raw_write_unsigned (regcache, I387_FTAG_REGNUM (tdep), 0x3fff); } else @@ -2963,8 +2963,8 @@ i386_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type) int len = TYPE_LENGTH (type); gdb_assert (code == TYPE_CODE_STRUCT - || code == TYPE_CODE_UNION - || code == TYPE_CODE_ARRAY); + || code == TYPE_CODE_UNION + || code == TYPE_CODE_ARRAY); if (struct_convention == pcc_struct_convention || (struct_convention == default_struct_convention @@ -3018,10 +3018,10 @@ i386_return_value (struct gdbarch *gdbarch, struct value *function, value just after the function has returned. */ /* Note that the ABI doesn't mention functions returning arrays, - which is something possible in certain languages such as Ada. - In this case, the value is returned as if it was wrapped in - a record, so the convention applied to records also applies - to arrays. */ + which is something possible in certain languages such as Ada. + In this case, the value is returned as if it was wrapped in + a record, so the convention applied to records also applies + to arrays. */ if (readbuf) { @@ -3180,14 +3180,14 @@ i386_ymm_type (struct gdbarch *gdbarch) #if 0 union __gdb_builtin_type_vec256i { - int128_t v2_int128[2]; - int64_t v4_int64[4]; - int32_t v8_int32[8]; - int16_t v16_int16[16]; - int8_t v32_int8[32]; - double v4_double[4]; - float v8_float[8]; - bfloat16_t v16_bfloat16[16]; + int128_t v2_int128[2]; + int64_t v4_int64[4]; + int32_t v8_int32[8]; + int16_t v16_int16[16]; + int8_t v32_int8[32]; + double v4_double[4]; + float v8_float[8]; + bfloat16_t v16_bfloat16[16]; }; #endif @@ -3234,10 +3234,10 @@ i386_mmx_type (struct gdbarch *gdbarch) #if 0 union __gdb_builtin_type_vec64i { - int64_t uint64; - int32_t v2_int32[2]; - int16_t v4_int16[4]; - int8_t v8_int8[8]; + int64_t uint64; + int32_t v2_int32[2]; + int16_t v4_int16[4]; + int8_t v8_int8[8]; }; #endif @@ -4811,23 +4811,23 @@ i386_record_lea_modrm_addr (struct i386_record_s *irp, uint64_t *addr) offset64 = 0; if (base != 0xff) - { + { if (base == 4 && irp->popl_esp_hack) *addr += irp->popl_esp_hack; regcache_raw_read_unsigned (irp->regcache, irp->regmap[base], - &offset64); + &offset64); } if (irp->aflag == 2) - { + { *addr += offset64; - } + } else - *addr = (uint32_t) (offset64 + *addr); + *addr = (uint32_t) (offset64 + *addr); if (havesib && (index != 4 || scale != 0)) { regcache_raw_read_unsigned (irp->regcache, irp->regmap[index], - &offset64); + &offset64); if (irp->aflag == 2) *addr += offset64 << scale; else @@ -4876,65 +4876,65 @@ i386_record_lea_modrm_addr (struct i386_record_s *irp, uint64_t *addr) case 0: regcache_raw_read_unsigned (irp->regcache, irp->regmap[X86_RECORD_REBX_REGNUM], - &offset64); + &offset64); *addr = (uint32_t) (*addr + offset64); regcache_raw_read_unsigned (irp->regcache, irp->regmap[X86_RECORD_RESI_REGNUM], - &offset64); + &offset64); *addr = (uint32_t) (*addr + offset64); break; case 1: regcache_raw_read_unsigned (irp->regcache, irp->regmap[X86_RECORD_REBX_REGNUM], - &offset64); + &offset64); *addr = (uint32_t) (*addr + offset64); regcache_raw_read_unsigned (irp->regcache, irp->regmap[X86_RECORD_REDI_REGNUM], - &offset64); + &offset64); *addr = (uint32_t) (*addr + offset64); break; case 2: regcache_raw_read_unsigned (irp->regcache, irp->regmap[X86_RECORD_REBP_REGNUM], - &offset64); + &offset64); *addr = (uint32_t) (*addr + offset64); regcache_raw_read_unsigned (irp->regcache, irp->regmap[X86_RECORD_RESI_REGNUM], - &offset64); + &offset64); *addr = (uint32_t) (*addr + offset64); break; case 3: regcache_raw_read_unsigned (irp->regcache, irp->regmap[X86_RECORD_REBP_REGNUM], - &offset64); + &offset64); *addr = (uint32_t) (*addr + offset64); regcache_raw_read_unsigned (irp->regcache, irp->regmap[X86_RECORD_REDI_REGNUM], - &offset64); + &offset64); *addr = (uint32_t) (*addr + offset64); break; case 4: regcache_raw_read_unsigned (irp->regcache, irp->regmap[X86_RECORD_RESI_REGNUM], - &offset64); + &offset64); *addr = (uint32_t) (*addr + offset64); break; case 5: regcache_raw_read_unsigned (irp->regcache, irp->regmap[X86_RECORD_REDI_REGNUM], - &offset64); + &offset64); *addr = (uint32_t) (*addr + offset64); break; case 6: regcache_raw_read_unsigned (irp->regcache, irp->regmap[X86_RECORD_REBP_REGNUM], - &offset64); + &offset64); *addr = (uint32_t) (*addr + offset64); break; case 7: regcache_raw_read_unsigned (irp->regcache, irp->regmap[X86_RECORD_REBX_REGNUM], - &offset64); + &offset64); *addr = (uint32_t) (*addr + offset64); break; } @@ -4958,14 +4958,14 @@ i386_record_lea_modrm (struct i386_record_s *irp) if (irp->override >= 0) { if (record_full_memory_query) - { - if (yquery (_("\ + { + if (yquery (_("\ Process record ignores the memory change of instruction at address %s\n\ because it can't get the value of the segment register.\n\ Do you want to stop the program?"), - paddress (gdbarch, irp->orig_addr))) + paddress (gdbarch, irp->orig_addr))) return -1; - } + } return 0; } @@ -5010,8 +5010,8 @@ i386_record_push (struct i386_record_s *irp, int size) wrong, 0 otherwise. */ static int i386_record_floats (struct gdbarch *gdbarch, - struct i386_record_s *ir, - uint32_t iregnum) + struct i386_record_s *ir, + uint32_t iregnum) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); int i; @@ -5024,32 +5024,32 @@ static int i386_record_floats (struct gdbarch *gdbarch, if (I386_SAVE_FPU_REGS == iregnum) { for (i = I387_ST0_REGNUM (tdep); i <= I387_ST0_REGNUM (tdep) + 7; i++) - { - if (record_full_arch_list_add_reg (ir->regcache, i)) - return -1; - } + { + if (record_full_arch_list_add_reg (ir->regcache, i)) + return -1; + } } else if (I386_SAVE_FPU_ENV == iregnum) { for (i = I387_FCTRL_REGNUM (tdep); i <= I387_FOP_REGNUM (tdep); i++) { if (record_full_arch_list_add_reg (ir->regcache, i)) - return -1; + return -1; } } else if (I386_SAVE_FPU_ENV_REG_STACK == iregnum) { for (i = I387_ST0_REGNUM (tdep); i <= I387_FOP_REGNUM (tdep); i++) { - if (record_full_arch_list_add_reg (ir->regcache, i)) - return -1; + if (record_full_arch_list_add_reg (ir->regcache, i)) + return -1; } } else if ((iregnum >= I387_ST0_REGNUM (tdep)) && - (iregnum <= I387_FOP_REGNUM (tdep))) + (iregnum <= I387_FOP_REGNUM (tdep))) { if (record_full_arch_list_add_reg (ir->regcache,iregnum)) - return -1; + return -1; } else { @@ -5061,7 +5061,7 @@ static int i386_record_floats (struct gdbarch *gdbarch, for (i = I387_FCTRL_REGNUM (tdep); i <= I387_FOP_REGNUM (tdep); i++) { if (record_full_arch_list_add_reg (ir->regcache, i)) - return -1; + return -1; } } return 0; @@ -5103,7 +5103,7 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, if (record_debug > 1) fprintf_unfiltered (gdb_stdlog, "Process record: i386_process_record " - "addr = %s\n", + "addr = %s\n", paddress (gdbarch, ir.addr)); /* prefixes */ @@ -5147,33 +5147,33 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, case ADDR_PREFIX_OPCODE: prefixes |= PREFIX_ADDR; break; - case 0x40: /* i386 inc %eax */ - case 0x41: /* i386 inc %ecx */ - case 0x42: /* i386 inc %edx */ - case 0x43: /* i386 inc %ebx */ - case 0x44: /* i386 inc %esp */ - case 0x45: /* i386 inc %ebp */ - case 0x46: /* i386 inc %esi */ - case 0x47: /* i386 inc %edi */ - case 0x48: /* i386 dec %eax */ - case 0x49: /* i386 dec %ecx */ - case 0x4a: /* i386 dec %edx */ - case 0x4b: /* i386 dec %ebx */ - case 0x4c: /* i386 dec %esp */ - case 0x4d: /* i386 dec %ebp */ - case 0x4e: /* i386 dec %esi */ - case 0x4f: /* i386 dec %edi */ - if (ir.regmap[X86_RECORD_R8_REGNUM]) /* 64 bit target */ - { - /* REX */ - rex_w = (opcode8 >> 3) & 1; - rex_r = (opcode8 & 0x4) << 1; - ir.rex_x = (opcode8 & 0x2) << 2; - ir.rex_b = (opcode8 & 0x1) << 3; - } + case 0x40: /* i386 inc %eax */ + case 0x41: /* i386 inc %ecx */ + case 0x42: /* i386 inc %edx */ + case 0x43: /* i386 inc %ebx */ + case 0x44: /* i386 inc %esp */ + case 0x45: /* i386 inc %ebp */ + case 0x46: /* i386 inc %esi */ + case 0x47: /* i386 inc %edi */ + case 0x48: /* i386 dec %eax */ + case 0x49: /* i386 dec %ecx */ + case 0x4a: /* i386 dec %edx */ + case 0x4b: /* i386 dec %ebx */ + case 0x4c: /* i386 dec %esp */ + case 0x4d: /* i386 dec %ebp */ + case 0x4e: /* i386 dec %esi */ + case 0x4f: /* i386 dec %edi */ + if (ir.regmap[X86_RECORD_R8_REGNUM]) /* 64 bit target */ + { + /* REX */ + rex_w = (opcode8 >> 3) & 1; + rex_r = (opcode8 & 0x4) << 1; + ir.rex_x = (opcode8 & 0x2) << 2; + ir.rex_b = (opcode8 & 0x1) << 3; + } else /* 32 bit target */ goto out_prefixes; - break; + break; default: goto out_prefixes; break; @@ -5187,7 +5187,7 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, else { if (prefixes & PREFIX_DATA) - ir.dflag ^= 1; + ir.dflag ^= 1; } if (prefixes & PREFIX_ADDR) ir.aflag ^= 1; @@ -5274,7 +5274,7 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, } else { - ir.rm |= ir.rex_b; + ir.rm |= ir.rex_b; if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM]) ir.rm &= 0x3; I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm); @@ -5283,7 +5283,7 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, case 1: /* OP Gv, Ev */ if (i386_record_modrm (&ir)) return -1; - ir.reg |= rex_r; + ir.reg |= rex_r; if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM]) ir.reg &= 0x3; I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.reg); @@ -5312,10 +5312,10 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, if (ir.mod != 3) { - if (opcode == 0x83) - ir.rip_offset = 1; - else - ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot); + if (opcode == 0x83) + ir.rip_offset = 1; + else + ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot); if (i386_record_lea_modrm (&ir)) return -1; } @@ -5357,7 +5357,7 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, return -1; if (ir.mod != 3 && ir.reg == 0) - ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot); + ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot); switch (ir.reg) { @@ -5373,7 +5373,7 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, } else { - ir.rm |= ir.rex_b; + ir.rm |= ir.rex_b; if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM]) ir.rm &= 0x3; I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm); @@ -5412,9 +5412,9 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, { case 0: /* inc */ case 1: /* dec */ - if ((opcode & 1) == 0) + if ((opcode & 1) == 0) ir.ot = OT_BYTE; - else + else ir.ot = ir.dflag + OT_WORD; if (ir.mod != 3) { @@ -5431,8 +5431,8 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); break; case 2: /* call */ - if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag) - ir.dflag = 2; + if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag) + ir.dflag = 2; if (i386_record_push (&ir, 1 << (ir.dflag + 1))) return -1; I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); @@ -5448,8 +5448,8 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); break; case 6: /* push */ - if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag) - ir.dflag = 2; + if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag) + ir.dflag = 2; if (i386_record_push (&ir, 1 << (ir.dflag + 1))) return -1; break; @@ -5484,9 +5484,9 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, if (i386_record_modrm (&ir)) return -1; if (opcode == 0x69) - ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot); + ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot); else if (opcode == 0x6b) - ir.rip_offset = 1; + ir.rip_offset = 1; ir.reg |= rex_r; if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM]) ir.reg &= 0x3; @@ -5533,7 +5533,7 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, return -1; if (ir.mod == 3) { - ir.reg |= rex_r; + ir.reg |= rex_r; I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM); if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM]) ir.reg &= 0x3; @@ -5597,7 +5597,7 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, case 0x68: case 0x6a: if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag) - ir.dflag = 2; + ir.dflag = 2; if (i386_record_push (&ir, 1 << (ir.dflag + 1))) return -1; break; @@ -5607,7 +5607,7 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, case 0x16: /* push ss */ case 0x1e: /* push ds */ if (ir.regmap[X86_RECORD_R8_REGNUM]) - { + { ir.addr -= 1; goto no_support; } @@ -5618,7 +5618,7 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, case 0x0fa0: /* push fs */ case 0x0fa8: /* push gs */ if (ir.regmap[X86_RECORD_R8_REGNUM]) - { + { ir.addr -= 2; goto no_support; } @@ -5628,7 +5628,7 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, case 0x60: /* pusha */ if (ir.regmap[X86_RECORD_R8_REGNUM]) - { + { ir.addr -= 1; goto no_support; } @@ -5650,7 +5650,7 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, case 0x61: /* popa */ if (ir.regmap[X86_RECORD_R8_REGNUM]) - { + { ir.addr -= 1; goto no_support; } @@ -5664,14 +5664,14 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, if (ir.regmap[X86_RECORD_R8_REGNUM]) ir.ot = ir.dflag ? OT_QUAD : OT_WORD; else - ir.ot = ir.dflag + OT_WORD; + ir.ot = ir.dflag + OT_WORD; if (i386_record_modrm (&ir)) return -1; if (ir.mod == 3) I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b); else { - ir.popl_esp_hack = 1 << ir.ot; + ir.popl_esp_hack = 1 << ir.ot; if (i386_record_lea_modrm (&ir)) return -1; } @@ -5681,7 +5681,7 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, case 0xc8: /* enter */ I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REBP_REGNUM); if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag) - ir.dflag = 2; + ir.dflag = 2; if (i386_record_push (&ir, 1 << (ir.dflag + 1))) return -1; break; @@ -5693,7 +5693,7 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, case 0x07: /* pop es */ if (ir.regmap[X86_RECORD_R8_REGNUM]) - { + { ir.addr -= 1; goto no_support; } @@ -5704,7 +5704,7 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, case 0x17: /* pop ss */ if (ir.regmap[X86_RECORD_R8_REGNUM]) - { + { ir.addr -= 1; goto no_support; } @@ -5715,7 +5715,7 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, case 0x1f: /* pop ds */ if (ir.regmap[X86_RECORD_R8_REGNUM]) - { + { ir.addr -= 1; goto no_support; } @@ -5750,14 +5750,14 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, if (ir.mod != 3) { - if (opcode == 0xc6 || opcode == 0xc7) + if (opcode == 0xc6 || opcode == 0xc7) ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot); if (i386_record_lea_modrm (&ir)) return -1; } else { - if (opcode == 0xc6 || opcode == 0xc7) + if (opcode == 0xc6 || opcode == 0xc7) ir.rm |= ir.rex_b; if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM]) ir.rm &= 0x3; @@ -5864,47 +5864,47 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache, case 0xa2: /* mov EAX */ case 0xa3: if (ir.override >= 0) - { - if (record_full_memory_query) - { - if (yquery (_("\ + { + if (record_full_memory_query) + { + if (yquery (_("\ Process record ignores the memory change of instruction at address %s\n\ because it can't get the value of the segment register.\n\ Do you want to stop the program?"), - paddress (gdbarch, ir.orig_addr))) - return -1; - } + paddress (gdbarch, ir.orig_addr))) + return -1; + } } else { - if ((opcode & 1) == 0) + if ((opcode & 1) == 0) ir.ot = OT_BYTE; else ir.ot = ir.dflag + OT_WORD; if (ir.aflag == 2) { - if (record_read_memory (gdbarch, ir.addr, buf, 8)) + if (record_read_memory (gdbarch, ir.addr, buf, 8)) return -1; ir.addr += 8; addr = extract_unsigned_integer (buf, 8, byte_order); } - else if (ir.aflag) + else if (ir.aflag) { - if (record_read_memory (gdbarch, ir.addr, buf, 4)) + if (record_read_memory (gdbarch, ir.addr, buf, 4)) return -1; ir.addr += 4; - addr = extract_unsigned_integer (buf, 4, byte_order); + addr = extract_unsigned_integer (buf, 4, byte_order); } - else + else { - if (record_read_memory (gdbarch, ir.addr, buf, 2)) + if (record_read_memory (gdbarch, ir.addr, buf, 2)) return -1; ir.addr += 2; - addr = extract_unsigned_integer (buf, 2, byte_order); + addr = extract_unsigned_integer (buf, 2, byte_order); } if (record_full_arch_list_add_mem (addr, 1 << ir.ot)) return -1; - } + } break; case 0xb0: /* mov R, Ib */ @@ -5971,7 +5971,7 @@ Do you want to stop the program?"), case 0xc4: /* les Gv */ case 0xc5: /* lds Gv */ if (ir.regmap[X86_RECORD_R8_REGNUM]) - { + { ir.addr -= 1; goto no_support; } @@ -6079,21 +6079,21 @@ Do you want to stop the program?"), switch (ir.reg) { case 0x02: - case 0x12: - case 0x22: - case 0x32: + case 0x12: + case 0x22: + case 0x32: /* For fcom, ficom nothing to do. */ - break; + break; case 0x03: - case 0x13: - case 0x23: - case 0x33: + case 0x13: + case 0x23: + case 0x33: /* For fcomp, ficomp pop FPU stack, store all. */ - if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS)) - return -1; - break; - case 0x00: - case 0x01: + if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS)) + return -1; + break; + case 0x00: + case 0x01: case 0x04: case 0x05: case 0x06: @@ -6116,11 +6116,11 @@ Do you want to stop the program?"), case 0x35: case 0x36: case 0x37: - /* For fadd, fmul, fsub, fsubr, fdiv, fdivr, fiadd, fimul, - fisub, fisubr, fidiv, fidivr, modR/M.reg is an extension - of code, always affects st(0) register. */ - if (i386_record_floats (gdbarch, &ir, I387_ST0_REGNUM (tdep))) - return -1; + /* For fadd, fmul, fsub, fsubr, fdiv, fdivr, fiadd, fimul, + fisub, fisubr, fidiv, fidivr, modR/M.reg is an extension + of code, always affects st(0) register. */ + if (i386_record_floats (gdbarch, &ir, I387_ST0_REGNUM (tdep))) + return -1; break; case 0x08: case 0x0a: @@ -6129,7 +6129,7 @@ Do you want to stop the program?"), case 0x19: case 0x1a: case 0x1b: - case 0x1d: + case 0x1d: case 0x28: case 0x29: case 0x2a: @@ -6138,8 +6138,8 @@ Do you want to stop the program?"), case 0x39: case 0x3a: case 0x3b: - case 0x3c: - case 0x3d: + case 0x3c: + case 0x3d: switch (ir.reg & 7) { case 0: @@ -6222,21 +6222,21 @@ Do you want to stop the program?"), } break; case 0x0c: - /* Insn fldenv. */ - if (i386_record_floats (gdbarch, &ir, - I386_SAVE_FPU_ENV_REG_STACK)) - return -1; - break; + /* Insn fldenv. */ + if (i386_record_floats (gdbarch, &ir, + I386_SAVE_FPU_ENV_REG_STACK)) + return -1; + break; case 0x0d: - /* Insn fldcw. */ - if (i386_record_floats (gdbarch, &ir, I387_FCTRL_REGNUM (tdep))) - return -1; - break; + /* Insn fldcw. */ + if (i386_record_floats (gdbarch, &ir, I387_FCTRL_REGNUM (tdep))) + return -1; + break; case 0x2c: - /* Insn frstor. */ - if (i386_record_floats (gdbarch, &ir, - I386_SAVE_FPU_ENV_REG_STACK)) - return -1; + /* Insn frstor. */ + if (i386_record_floats (gdbarch, &ir, + I386_SAVE_FPU_ENV_REG_STACK)) + return -1; break; case 0x0e: if (ir.dflag) @@ -6254,9 +6254,9 @@ Do you want to stop the program?"), case 0x2f: if (record_full_arch_list_add_mem (addr64, 2)) return -1; - /* Insn fstp, fbstp. */ - if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS)) - return -1; + /* Insn fstp, fbstp. */ + if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS)) + return -1; break; case 0x1f: case 0x3e: @@ -6299,7 +6299,7 @@ Do you want to stop the program?"), } /* Opcode is an extension of modR/M byte. */ else - { + { switch (opcode) { case 0xd8: @@ -6315,7 +6315,7 @@ Do you want to stop the program?"), I386_SAVE_FPU_REGS)) return -1; } - else + else { if (i386_record_floats (gdbarch, &ir, I387_ST0_REGNUM (tdep))) @@ -6331,8 +6331,8 @@ Do you want to stop the program?"), } } } - else - { + else + { switch (ir.modrm) { case 0xe0: @@ -6377,15 +6377,15 @@ Do you want to stop the program?"), break; } } - break; - case 0xda: - if (0xe9 == ir.modrm) - { + break; + case 0xda: + if (0xe9 == ir.modrm) + { if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS)) return -1; - } - else if ((0x0c == ir.modrm >> 4) || (0x0d == ir.modrm >> 4)) - { + } + else if ((0x0c == ir.modrm >> 4) || (0x0d == ir.modrm >> 4)) + { if (i386_record_floats (gdbarch, &ir, I387_ST0_REGNUM (tdep))) return -1; @@ -6403,16 +6403,16 @@ Do you want to stop the program?"), ((ir.modrm & 0x0f) - 0x08))) return -1; } - } - break; - case 0xdb: - if (0xe3 == ir.modrm) - { + } + break; + case 0xdb: + if (0xe3 == ir.modrm) + { if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_ENV)) return -1; - } - else if ((0x0c == ir.modrm >> 4) || (0x0d == ir.modrm >> 4)) - { + } + else if ((0x0c == ir.modrm >> 4) || (0x0d == ir.modrm >> 4)) + { if (i386_record_floats (gdbarch, &ir, I387_ST0_REGNUM (tdep))) return -1; @@ -6430,13 +6430,13 @@ Do you want to stop the program?"), ((ir.modrm & 0x0f) - 0x08))) return -1; } - } - break; - case 0xdc: - if ((0x0c == ir.modrm >> 4) + } + break; + case 0xdc: + if ((0x0c == ir.modrm >> 4) || (0x0d == ir.modrm >> 4) || (0x0f == ir.modrm >> 4)) - { + { if ((ir.modrm & 0x0f) <= 7) { if (i386_record_floats (gdbarch, &ir, @@ -6451,55 +6451,55 @@ Do you want to stop the program?"), ((ir.modrm & 0x0f) - 0x08))) return -1; } - } + } break; - case 0xdd: - if (0x0c == ir.modrm >> 4) - { - if (i386_record_floats (gdbarch, &ir, - I387_FTAG_REGNUM (tdep))) - return -1; - } - else if ((0x0d == ir.modrm >> 4) || (0x0e == ir.modrm >> 4)) - { - if ((ir.modrm & 0x0f) <= 7) - { + case 0xdd: + if (0x0c == ir.modrm >> 4) + { + if (i386_record_floats (gdbarch, &ir, + I387_FTAG_REGNUM (tdep))) + return -1; + } + else if ((0x0d == ir.modrm >> 4) || (0x0e == ir.modrm >> 4)) + { + if ((ir.modrm & 0x0f) <= 7) + { if (i386_record_floats (gdbarch, &ir, I387_ST0_REGNUM (tdep) + (ir.modrm & 0x0f))) return -1; - } - else - { - if (i386_record_floats (gdbarch, &ir, + } + else + { + if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS)) - return -1; - } - } - break; - case 0xde: - if ((0x0c == ir.modrm >> 4) + return -1; + } + } + break; + case 0xde: + if ((0x0c == ir.modrm >> 4) || (0x0e == ir.modrm >> 4) || (0x0f == ir.modrm >> 4) || (0xd9 == ir.modrm)) - { + { if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS)) return -1; - } - break; - case 0xdf: - if (0xe0 == ir.modrm) - { + } + break; + case 0xdf: + if (0xe0 == ir.modrm) + { if (record_full_arch_list_add_reg (ir.regcache, I386_EAX_REGNUM)) return -1; - } - else if ((0x0f == ir.modrm >> 4) || (0x0e == ir.modrm >> 4)) - { + } + else if ((0x0f == ir.modrm >> 4) || (0x0e == ir.modrm >> 4)) + { if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS)) return -1; - } - break; + } + break; } } break; @@ -6511,51 +6511,51 @@ Do you want to stop the program?"), case 0x6c: /* insS */ case 0x6d: regcache_raw_read_unsigned (ir.regcache, - ir.regmap[X86_RECORD_RECX_REGNUM], - &addr); + ir.regmap[X86_RECORD_RECX_REGNUM], + &addr); if (addr) - { - ULONGEST es, ds; + { + ULONGEST es, ds; - if ((opcode & 1) == 0) + if ((opcode & 1) == 0) ir.ot = OT_BYTE; - else + else ir.ot = ir.dflag + OT_WORD; - regcache_raw_read_unsigned (ir.regcache, - ir.regmap[X86_RECORD_REDI_REGNUM], - &addr); - - regcache_raw_read_unsigned (ir.regcache, - ir.regmap[X86_RECORD_ES_REGNUM], - &es); - regcache_raw_read_unsigned (ir.regcache, - ir.regmap[X86_RECORD_DS_REGNUM], - &ds); - if (ir.aflag && (es != ds)) - { - /* addr += ((uint32_t) read_register (I386_ES_REGNUM)) << 4; */ - if (record_full_memory_query) - { - if (yquery (_("\ + regcache_raw_read_unsigned (ir.regcache, + ir.regmap[X86_RECORD_REDI_REGNUM], + &addr); + + regcache_raw_read_unsigned (ir.regcache, + ir.regmap[X86_RECORD_ES_REGNUM], + &es); + regcache_raw_read_unsigned (ir.regcache, + ir.regmap[X86_RECORD_DS_REGNUM], + &ds); + if (ir.aflag && (es != ds)) + { + /* addr += ((uint32_t) read_register (I386_ES_REGNUM)) << 4; */ + if (record_full_memory_query) + { + if (yquery (_("\ Process record ignores the memory change of instruction at address %s\n\ because it can't get the value of the segment register.\n\ Do you want to stop the program?"), - paddress (gdbarch, ir.orig_addr))) - return -1; - } - } - else - { - if (record_full_arch_list_add_mem (addr, 1 << ir.ot)) - return -1; - } - - if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) - I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM); - if (opcode == 0xa4 || opcode == 0xa5) - I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM); - I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REDI_REGNUM); - I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); + paddress (gdbarch, ir.orig_addr))) + return -1; + } + } + else + { + if (record_full_arch_list_add_mem (addr, 1 << ir.ot)) + return -1; + } + + if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) + I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM); + if (opcode == 0xa4 || opcode == 0xa5) + I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM); + I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REDI_REGNUM); + I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); } break; @@ -6564,7 +6564,7 @@ Do you want to stop the program?"), I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REDI_REGNUM); I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM); if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) - I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM); + I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM); I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); break; @@ -6573,7 +6573,7 @@ Do you want to stop the program?"), I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM); I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM); if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) - I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM); + I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM); I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); break; @@ -6581,7 +6581,7 @@ Do you want to stop the program?"), case 0xaf: I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REDI_REGNUM); if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) - I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM); + I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM); I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); break; @@ -6589,7 +6589,7 @@ Do you want to stop the program?"), case 0x6f: I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM); if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) - I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM); + I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM); I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); break; @@ -6624,20 +6624,20 @@ Do you want to stop the program?"), case 0xe8: /* call im */ if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag) - ir.dflag = 2; + ir.dflag = 2; if (i386_record_push (&ir, 1 << (ir.dflag + 1))) - return -1; + return -1; break; case 0x9a: /* lcall im */ if (ir.regmap[X86_RECORD_R8_REGNUM]) - { - ir.addr -= 1; - goto no_support; - } + { + ir.addr -= 1; + goto no_support; + } I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_CS_REGNUM); if (i386_record_push (&ir, 1 << (ir.dflag + 1))) - return -1; + return -1; break; case 0xe9: /* jmp im */ @@ -6698,7 +6698,7 @@ Do you want to stop the program?"), if (i386_record_modrm (&ir)) return -1; if (ir.mod == 3) - I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rex_b ? (ir.rm | ir.rex_b) + I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rex_b ? (ir.rm | ir.rex_b) : (ir.rm & 0x3)); else { @@ -6735,9 +6735,9 @@ Do you want to stop the program?"), case 0x9c: /* pushf */ I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag) - ir.dflag = 2; + ir.dflag = 2; if (i386_record_push (&ir, 1 << (ir.dflag + 1))) - return -1; + return -1; break; case 0x9d: /* popf */ @@ -6747,10 +6747,10 @@ Do you want to stop the program?"), case 0x9e: /* sahf */ if (ir.regmap[X86_RECORD_R8_REGNUM]) - { - ir.addr -= 1; - goto no_support; - } + { + ir.addr -= 1; + goto no_support; + } /* FALLTHROUGH */ case 0xf5: /* cmc */ case 0xf8: /* clc */ @@ -6762,10 +6762,10 @@ Do you want to stop the program?"), case 0x9f: /* lahf */ if (ir.regmap[X86_RECORD_R8_REGNUM]) - { - ir.addr -= 1; - goto no_support; - } + { + ir.addr -= 1; + goto no_support; + } I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM); break; @@ -6783,8 +6783,8 @@ Do you want to stop the program?"), } if (ir.reg != 4) { - if (ir.mod == 3) - I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b); + if (ir.mod == 3) + I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b); else { if (i386_record_lea_modrm (&ir)) @@ -6803,34 +6803,34 @@ Do you want to stop the program?"), case 0x0fbb: /* btc */ ir.ot = ir.dflag + OT_WORD; if (i386_record_modrm (&ir)) - return -1; + return -1; if (ir.mod == 3) - I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b); + I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b); else - { - uint64_t addr64; - if (i386_record_lea_modrm_addr (&ir, &addr64)) - return -1; - regcache_raw_read_unsigned (ir.regcache, - ir.regmap[ir.reg | rex_r], - &addr); - switch (ir.dflag) - { - case 0: - addr64 += ((int16_t) addr >> 4) << 4; - break; - case 1: - addr64 += ((int32_t) addr >> 5) << 5; - break; - case 2: - addr64 += ((int64_t) addr >> 6) << 6; - break; - } - if (record_full_arch_list_add_mem (addr64, 1 << ir.ot)) - return -1; - if (i386_record_lea_modrm (&ir)) - return -1; - } + { + uint64_t addr64; + if (i386_record_lea_modrm_addr (&ir, &addr64)) + return -1; + regcache_raw_read_unsigned (ir.regcache, + ir.regmap[ir.reg | rex_r], + &addr); + switch (ir.dflag) + { + case 0: + addr64 += ((int16_t) addr >> 4) << 4; + break; + case 1: + addr64 += ((int32_t) addr >> 5) << 5; + break; + case 2: + addr64 += ((int64_t) addr >> 6) << 6; + break; + } + if (record_full_arch_list_add_mem (addr64, 1 << ir.ot)) + return -1; + if (i386_record_lea_modrm (&ir)) + return -1; + } I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); break; @@ -6848,10 +6848,10 @@ Do you want to stop the program?"), case 0xd4: /* aam */ case 0xd5: /* aad */ if (ir.regmap[X86_RECORD_R8_REGNUM]) - { - ir.addr -= 1; - goto no_support; - } + { + ir.addr -= 1; + goto no_support; + } I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM); I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); break; @@ -6936,10 +6936,10 @@ Do you want to stop the program?"), case 0xd6: /* salc */ if (ir.regmap[X86_RECORD_R8_REGNUM]) - { - ir.addr -= 1; - goto no_support; - } + { + ir.addr -= 1; + goto no_support; + } I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM); I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); break; @@ -6974,11 +6974,11 @@ Do you want to stop the program?"), case 0x0f34: /* sysenter */ { int ret; - if (ir.regmap[X86_RECORD_R8_REGNUM]) - { - ir.addr -= 2; - goto no_support; - } + if (ir.regmap[X86_RECORD_R8_REGNUM]) + { + ir.addr -= 2; + goto no_support; + } if (tdep->i386_sysenter_record == NULL) { printf_unfiltered (_("Process record does not support " @@ -7017,7 +7017,7 @@ Do you want to stop the program?"), case 0x0f07: /* sysret */ printf_unfiltered (_("Process record does not support " - "instruction sysret.\n")); + "instruction sysret.\n")); ir.addr -= 2; goto no_support; break; @@ -7044,7 +7044,7 @@ Do you want to stop the program?"), case 0: /* sldt */ case 1: /* str */ if (ir.mod == 3) - I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b); + I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b); else { ir.ot = OT_WORD; @@ -7057,7 +7057,7 @@ Do you want to stop the program?"), break; case 4: /* verr */ case 5: /* verw */ - I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); + I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); break; default: ir.addr -= 3; @@ -7084,15 +7084,15 @@ Do you want to stop the program?"), } if (ir.override >= 0) { - if (record_full_memory_query) - { - if (yquery (_("\ + if (record_full_memory_query) + { + if (yquery (_("\ Process record ignores the memory change of instruction at address %s\n\ because it can't get the value of the segment register.\n\ Do you want to stop the program?"), - paddress (gdbarch, ir.orig_addr))) + paddress (gdbarch, ir.orig_addr))) return -1; - } + } } else { @@ -7101,16 +7101,16 @@ Do you want to stop the program?"), if (record_full_arch_list_add_mem (addr64, 2)) return -1; addr64 += 2; - if (ir.regmap[X86_RECORD_R8_REGNUM]) - { - if (record_full_arch_list_add_mem (addr64, 8)) + if (ir.regmap[X86_RECORD_R8_REGNUM]) + { + if (record_full_arch_list_add_mem (addr64, 8)) return -1; - } - else - { - if (record_full_arch_list_add_mem (addr64, 4)) + } + else + { + if (record_full_arch_list_add_mem (addr64, 4)) return -1; - } + } } } break; @@ -7136,15 +7136,15 @@ Do you want to stop the program?"), /* sidt */ if (ir.override >= 0) { - if (record_full_memory_query) - { - if (yquery (_("\ + if (record_full_memory_query) + { + if (yquery (_("\ Process record ignores the memory change of instruction at address %s\n\ because it can't get the value of the segment register.\n\ Do you want to stop the program?"), - paddress (gdbarch, ir.orig_addr))) - return -1; - } + paddress (gdbarch, ir.orig_addr))) + return -1; + } } else { @@ -7155,16 +7155,16 @@ Do you want to stop the program?"), if (record_full_arch_list_add_mem (addr64, 2)) return -1; addr64 += 2; - if (ir.regmap[X86_RECORD_R8_REGNUM]) - { - if (record_full_arch_list_add_mem (addr64, 8)) - return -1; - } - else - { - if (record_full_arch_list_add_mem (addr64, 4)) - return -1; - } + if (ir.regmap[X86_RECORD_R8_REGNUM]) + { + if (record_full_arch_list_add_mem (addr64, 8)) + return -1; + } + else + { + if (record_full_arch_list_add_mem (addr64, 4)) + return -1; + } } } break; @@ -7212,13 +7212,13 @@ Do you want to stop the program?"), if (ir.mod == 3) { if (ir.rm == 0 && ir.regmap[X86_RECORD_R8_REGNUM]) - I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_GS_REGNUM); + I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_GS_REGNUM); else - { - ir.addr -= 3; - opcode = opcode << 8 | ir.modrm; - goto no_support; - } + { + ir.addr -= 3; + opcode = opcode << 8 | ir.modrm; + goto no_support; + } } else I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); @@ -7239,18 +7239,18 @@ Do you want to stop the program?"), if (i386_record_modrm (&ir)) return -1; if (ir.mod == 3 || ir.regmap[X86_RECORD_R8_REGNUM]) - { - I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.regmap[X86_RECORD_R8_REGNUM] + { + I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.regmap[X86_RECORD_R8_REGNUM] ? (ir.reg | rex_r) : ir.rm); - } + } else - { - ir.ot = ir.dflag ? OT_LONG : OT_WORD; - if (i386_record_lea_modrm (&ir)) - return -1; - } + { + ir.ot = ir.dflag ? OT_LONG : OT_WORD; + if (i386_record_lea_modrm (&ir)) + return -1; + } if (!ir.regmap[X86_RECORD_R8_REGNUM]) - I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); + I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); break; case 0x0f02: /* lar */ @@ -7265,7 +7265,7 @@ Do you want to stop the program?"), if (i386_record_modrm (&ir)) return -1; if (ir.mod == 3 && ir.reg == 3) - { + { ir.addr -= 3; opcode = opcode << 8 | ir.modrm; goto no_support; @@ -7302,7 +7302,7 @@ Do you want to stop the program?"), if (opcode & 2) I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); else - I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b); + I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b); break; default: ir.addr -= 3; @@ -7324,7 +7324,7 @@ Do you want to stop the program?"), goto no_support; } if (opcode & 2) - I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); + I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); else I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b); break; @@ -7341,7 +7341,7 @@ Do you want to stop the program?"), case 0x0f0e: /* 3DNow! femms */ case 0x0f77: /* emms */ if (i386_fpc_regnum_p (gdbarch, I387_FTAG_REGNUM(tdep))) - goto no_support; + goto no_support; record_full_arch_list_add_reg (ir.regcache, I387_FTAG_REGNUM(tdep)); break; @@ -7352,42 +7352,42 @@ Do you want to stop the program?"), return -1; ir.addr++; switch (opcode8) - { - case 0x0c: /* 3DNow! pi2fw */ - case 0x0d: /* 3DNow! pi2fd */ - case 0x1c: /* 3DNow! pf2iw */ - case 0x1d: /* 3DNow! pf2id */ - case 0x8a: /* 3DNow! pfnacc */ - case 0x8e: /* 3DNow! pfpnacc */ - case 0x90: /* 3DNow! pfcmpge */ - case 0x94: /* 3DNow! pfmin */ - case 0x96: /* 3DNow! pfrcp */ - case 0x97: /* 3DNow! pfrsqrt */ - case 0x9a: /* 3DNow! pfsub */ - case 0x9e: /* 3DNow! pfadd */ - case 0xa0: /* 3DNow! pfcmpgt */ - case 0xa4: /* 3DNow! pfmax */ - case 0xa6: /* 3DNow! pfrcpit1 */ - case 0xa7: /* 3DNow! pfrsqit1 */ - case 0xaa: /* 3DNow! pfsubr */ - case 0xae: /* 3DNow! pfacc */ - case 0xb0: /* 3DNow! pfcmpeq */ - case 0xb4: /* 3DNow! pfmul */ - case 0xb6: /* 3DNow! pfrcpit2 */ - case 0xb7: /* 3DNow! pmulhrw */ - case 0xbb: /* 3DNow! pswapd */ - case 0xbf: /* 3DNow! pavgusb */ - if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.reg)) - goto no_support_3dnow_data; - record_full_arch_list_add_reg (ir.regcache, ir.reg); - break; - - default: + { + case 0x0c: /* 3DNow! pi2fw */ + case 0x0d: /* 3DNow! pi2fd */ + case 0x1c: /* 3DNow! pf2iw */ + case 0x1d: /* 3DNow! pf2id */ + case 0x8a: /* 3DNow! pfnacc */ + case 0x8e: /* 3DNow! pfpnacc */ + case 0x90: /* 3DNow! pfcmpge */ + case 0x94: /* 3DNow! pfmin */ + case 0x96: /* 3DNow! pfrcp */ + case 0x97: /* 3DNow! pfrsqrt */ + case 0x9a: /* 3DNow! pfsub */ + case 0x9e: /* 3DNow! pfadd */ + case 0xa0: /* 3DNow! pfcmpgt */ + case 0xa4: /* 3DNow! pfmax */ + case 0xa6: /* 3DNow! pfrcpit1 */ + case 0xa7: /* 3DNow! pfrsqit1 */ + case 0xaa: /* 3DNow! pfsubr */ + case 0xae: /* 3DNow! pfacc */ + case 0xb0: /* 3DNow! pfcmpeq */ + case 0xb4: /* 3DNow! pfmul */ + case 0xb6: /* 3DNow! pfrcpit2 */ + case 0xb7: /* 3DNow! pmulhrw */ + case 0xbb: /* 3DNow! pswapd */ + case 0xbf: /* 3DNow! pavgusb */ + if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.reg)) + goto no_support_3dnow_data; + record_full_arch_list_add_reg (ir.regcache, ir.reg); + break; + + default: no_support_3dnow_data: - opcode = (opcode << 8) | opcode8; - goto no_support; - break; - } + opcode = (opcode << 8) | opcode8; + goto no_support; + break; + } break; case 0x0faa: /* rsm */ @@ -7406,69 +7406,69 @@ no_support_3dnow_data: if (i386_record_modrm (&ir)) return -1; switch(ir.reg) - { - case 0: /* fxsave */ - { - uint64_t tmpu64; + { + case 0: /* fxsave */ + { + uint64_t tmpu64; - I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); + I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); if (i386_record_lea_modrm_addr (&ir, &tmpu64)) return -1; - if (record_full_arch_list_add_mem (tmpu64, 512)) - return -1; - } - break; + if (record_full_arch_list_add_mem (tmpu64, 512)) + return -1; + } + break; - case 1: /* fxrstor */ - { - int i; + case 1: /* fxrstor */ + { + int i; - I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); + I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); - for (i = I387_MM0_REGNUM (tdep); - i386_mmx_regnum_p (gdbarch, i); i++) - record_full_arch_list_add_reg (ir.regcache, i); + for (i = I387_MM0_REGNUM (tdep); + i386_mmx_regnum_p (gdbarch, i); i++) + record_full_arch_list_add_reg (ir.regcache, i); - for (i = I387_XMM0_REGNUM (tdep); - i386_xmm_regnum_p (gdbarch, i); i++) - record_full_arch_list_add_reg (ir.regcache, i); + for (i = I387_XMM0_REGNUM (tdep); + i386_xmm_regnum_p (gdbarch, i); i++) + record_full_arch_list_add_reg (ir.regcache, i); - if (i386_mxcsr_regnum_p (gdbarch, I387_MXCSR_REGNUM(tdep))) - record_full_arch_list_add_reg (ir.regcache, + if (i386_mxcsr_regnum_p (gdbarch, I387_MXCSR_REGNUM(tdep))) + record_full_arch_list_add_reg (ir.regcache, I387_MXCSR_REGNUM(tdep)); - for (i = I387_ST0_REGNUM (tdep); - i386_fp_regnum_p (gdbarch, i); i++) - record_full_arch_list_add_reg (ir.regcache, i); - - for (i = I387_FCTRL_REGNUM (tdep); - i386_fpc_regnum_p (gdbarch, i); i++) - record_full_arch_list_add_reg (ir.regcache, i); - } - break; - - case 2: /* ldmxcsr */ - if (!i386_mxcsr_regnum_p (gdbarch, I387_MXCSR_REGNUM(tdep))) - goto no_support; - record_full_arch_list_add_reg (ir.regcache, I387_MXCSR_REGNUM(tdep)); - break; - - case 3: /* stmxcsr */ - ir.ot = OT_LONG; - if (i386_record_lea_modrm (&ir)) - return -1; - break; - - case 5: /* lfence */ - case 6: /* mfence */ - case 7: /* sfence clflush */ - break; - - default: - opcode = (opcode << 8) | ir.modrm; - goto no_support; - break; - } + for (i = I387_ST0_REGNUM (tdep); + i386_fp_regnum_p (gdbarch, i); i++) + record_full_arch_list_add_reg (ir.regcache, i); + + for (i = I387_FCTRL_REGNUM (tdep); + i386_fpc_regnum_p (gdbarch, i); i++) + record_full_arch_list_add_reg (ir.regcache, i); + } + break; + + case 2: /* ldmxcsr */ + if (!i386_mxcsr_regnum_p (gdbarch, I387_MXCSR_REGNUM(tdep))) + goto no_support; + record_full_arch_list_add_reg (ir.regcache, I387_MXCSR_REGNUM(tdep)); + break; + + case 3: /* stmxcsr */ + ir.ot = OT_LONG; + if (i386_record_lea_modrm (&ir)) + return -1; + break; + + case 5: /* lfence */ + case 6: /* mfence */ + case 7: /* sfence clflush */ + break; + + default: + opcode = (opcode << 8) | ir.modrm; + goto no_support; + break; + } break; case 0x0fc3: /* movnti */ @@ -7476,10 +7476,10 @@ no_support_3dnow_data: if (i386_record_modrm (&ir)) return -1; if (ir.mod == 3) - goto no_support; + goto no_support; ir.reg |= rex_r; if (i386_record_lea_modrm (&ir)) - return -1; + return -1; break; /* Add prefix to opcode. */ @@ -7599,541 +7599,541 @@ no_support_3dnow_data: case 0x0ffe: /* Mask out PREFIX_ADDR. */ switch ((prefixes & ~PREFIX_ADDR)) - { - case PREFIX_REPNZ: - opcode |= 0xf20000; - break; - case PREFIX_DATA: - opcode |= 0x660000; - break; - case PREFIX_REPZ: - opcode |= 0xf30000; - break; - } + { + case PREFIX_REPNZ: + opcode |= 0xf20000; + break; + case PREFIX_DATA: + opcode |= 0x660000; + break; + case PREFIX_REPZ: + opcode |= 0xf30000; + break; + } reswitch_prefix_add: switch (opcode) - { - case 0x0f38: - case 0x660f38: - case 0xf20f38: - case 0x0f3a: - case 0x660f3a: - if (record_read_memory (gdbarch, ir.addr, &opcode8, 1)) + { + case 0x0f38: + case 0x660f38: + case 0xf20f38: + case 0x0f3a: + case 0x660f3a: + if (record_read_memory (gdbarch, ir.addr, &opcode8, 1)) return -1; - ir.addr++; - opcode = (uint32_t) opcode8 | opcode << 8; - goto reswitch_prefix_add; - break; - - case 0x0f10: /* movups */ - case 0x660f10: /* movupd */ - case 0xf30f10: /* movss */ - case 0xf20f10: /* movsd */ - case 0x0f12: /* movlps */ - case 0x660f12: /* movlpd */ - case 0xf30f12: /* movsldup */ - case 0xf20f12: /* movddup */ - case 0x0f14: /* unpcklps */ - case 0x660f14: /* unpcklpd */ - case 0x0f15: /* unpckhps */ - case 0x660f15: /* unpckhpd */ - case 0x0f16: /* movhps */ - case 0x660f16: /* movhpd */ - case 0xf30f16: /* movshdup */ - case 0x0f28: /* movaps */ - case 0x660f28: /* movapd */ - case 0x0f2a: /* cvtpi2ps */ - case 0x660f2a: /* cvtpi2pd */ - case 0xf30f2a: /* cvtsi2ss */ - case 0xf20f2a: /* cvtsi2sd */ - case 0x0f2c: /* cvttps2pi */ - case 0x660f2c: /* cvttpd2pi */ - case 0x0f2d: /* cvtps2pi */ - case 0x660f2d: /* cvtpd2pi */ - case 0x660f3800: /* pshufb */ - case 0x660f3801: /* phaddw */ - case 0x660f3802: /* phaddd */ - case 0x660f3803: /* phaddsw */ - case 0x660f3804: /* pmaddubsw */ - case 0x660f3805: /* phsubw */ - case 0x660f3806: /* phsubd */ - case 0x660f3807: /* phsubsw */ - case 0x660f3808: /* psignb */ - case 0x660f3809: /* psignw */ - case 0x660f380a: /* psignd */ - case 0x660f380b: /* pmulhrsw */ - case 0x660f3810: /* pblendvb */ - case 0x660f3814: /* blendvps */ - case 0x660f3815: /* blendvpd */ - case 0x660f381c: /* pabsb */ - case 0x660f381d: /* pabsw */ - case 0x660f381e: /* pabsd */ - case 0x660f3820: /* pmovsxbw */ - case 0x660f3821: /* pmovsxbd */ - case 0x660f3822: /* pmovsxbq */ - case 0x660f3823: /* pmovsxwd */ - case 0x660f3824: /* pmovsxwq */ - case 0x660f3825: /* pmovsxdq */ - case 0x660f3828: /* pmuldq */ - case 0x660f3829: /* pcmpeqq */ - case 0x660f382a: /* movntdqa */ - case 0x660f3a08: /* roundps */ - case 0x660f3a09: /* roundpd */ - case 0x660f3a0a: /* roundss */ - case 0x660f3a0b: /* roundsd */ - case 0x660f3a0c: /* blendps */ - case 0x660f3a0d: /* blendpd */ - case 0x660f3a0e: /* pblendw */ - case 0x660f3a0f: /* palignr */ - case 0x660f3a20: /* pinsrb */ - case 0x660f3a21: /* insertps */ - case 0x660f3a22: /* pinsrd pinsrq */ - case 0x660f3a40: /* dpps */ - case 0x660f3a41: /* dppd */ - case 0x660f3a42: /* mpsadbw */ - case 0x660f3a60: /* pcmpestrm */ - case 0x660f3a61: /* pcmpestri */ - case 0x660f3a62: /* pcmpistrm */ - case 0x660f3a63: /* pcmpistri */ - case 0x0f51: /* sqrtps */ - case 0x660f51: /* sqrtpd */ - case 0xf20f51: /* sqrtsd */ - case 0xf30f51: /* sqrtss */ - case 0x0f52: /* rsqrtps */ - case 0xf30f52: /* rsqrtss */ - case 0x0f53: /* rcpps */ - case 0xf30f53: /* rcpss */ - case 0x0f54: /* andps */ - case 0x660f54: /* andpd */ - case 0x0f55: /* andnps */ - case 0x660f55: /* andnpd */ - case 0x0f56: /* orps */ - case 0x660f56: /* orpd */ - case 0x0f57: /* xorps */ - case 0x660f57: /* xorpd */ - case 0x0f58: /* addps */ - case 0x660f58: /* addpd */ - case 0xf20f58: /* addsd */ - case 0xf30f58: /* addss */ - case 0x0f59: /* mulps */ - case 0x660f59: /* mulpd */ - case 0xf20f59: /* mulsd */ - case 0xf30f59: /* mulss */ - case 0x0f5a: /* cvtps2pd */ - case 0x660f5a: /* cvtpd2ps */ - case 0xf20f5a: /* cvtsd2ss */ - case 0xf30f5a: /* cvtss2sd */ - case 0x0f5b: /* cvtdq2ps */ - case 0x660f5b: /* cvtps2dq */ - case 0xf30f5b: /* cvttps2dq */ - case 0x0f5c: /* subps */ - case 0x660f5c: /* subpd */ - case 0xf20f5c: /* subsd */ - case 0xf30f5c: /* subss */ - case 0x0f5d: /* minps */ - case 0x660f5d: /* minpd */ - case 0xf20f5d: /* minsd */ - case 0xf30f5d: /* minss */ - case 0x0f5e: /* divps */ - case 0x660f5e: /* divpd */ - case 0xf20f5e: /* divsd */ - case 0xf30f5e: /* divss */ - case 0x0f5f: /* maxps */ - case 0x660f5f: /* maxpd */ - case 0xf20f5f: /* maxsd */ - case 0xf30f5f: /* maxss */ - case 0x660f60: /* punpcklbw */ - case 0x660f61: /* punpcklwd */ - case 0x660f62: /* punpckldq */ - case 0x660f63: /* packsswb */ - case 0x660f64: /* pcmpgtb */ - case 0x660f65: /* pcmpgtw */ - case 0x660f66: /* pcmpgtd */ - case 0x660f67: /* packuswb */ - case 0x660f68: /* punpckhbw */ - case 0x660f69: /* punpckhwd */ - case 0x660f6a: /* punpckhdq */ - case 0x660f6b: /* packssdw */ - case 0x660f6c: /* punpcklqdq */ - case 0x660f6d: /* punpckhqdq */ - case 0x660f6e: /* movd */ - case 0x660f6f: /* movdqa */ - case 0xf30f6f: /* movdqu */ - case 0x660f70: /* pshufd */ - case 0xf20f70: /* pshuflw */ - case 0xf30f70: /* pshufhw */ - case 0x660f74: /* pcmpeqb */ - case 0x660f75: /* pcmpeqw */ - case 0x660f76: /* pcmpeqd */ - case 0x660f7c: /* haddpd */ - case 0xf20f7c: /* haddps */ - case 0x660f7d: /* hsubpd */ - case 0xf20f7d: /* hsubps */ - case 0xf30f7e: /* movq */ - case 0x0fc2: /* cmpps */ - case 0x660fc2: /* cmppd */ - case 0xf20fc2: /* cmpsd */ - case 0xf30fc2: /* cmpss */ - case 0x660fc4: /* pinsrw */ - case 0x0fc6: /* shufps */ - case 0x660fc6: /* shufpd */ - case 0x660fd0: /* addsubpd */ - case 0xf20fd0: /* addsubps */ - case 0x660fd1: /* psrlw */ - case 0x660fd2: /* psrld */ - case 0x660fd3: /* psrlq */ - case 0x660fd4: /* paddq */ - case 0x660fd5: /* pmullw */ - case 0xf30fd6: /* movq2dq */ - case 0x660fd8: /* psubusb */ - case 0x660fd9: /* psubusw */ - case 0x660fda: /* pminub */ - case 0x660fdb: /* pand */ - case 0x660fdc: /* paddusb */ - case 0x660fdd: /* paddusw */ - case 0x660fde: /* pmaxub */ - case 0x660fdf: /* pandn */ - case 0x660fe0: /* pavgb */ - case 0x660fe1: /* psraw */ - case 0x660fe2: /* psrad */ - case 0x660fe3: /* pavgw */ - case 0x660fe4: /* pmulhuw */ - case 0x660fe5: /* pmulhw */ - case 0x660fe6: /* cvttpd2dq */ - case 0xf20fe6: /* cvtpd2dq */ - case 0xf30fe6: /* cvtdq2pd */ - case 0x660fe8: /* psubsb */ - case 0x660fe9: /* psubsw */ - case 0x660fea: /* pminsw */ - case 0x660feb: /* por */ - case 0x660fec: /* paddsb */ - case 0x660fed: /* paddsw */ - case 0x660fee: /* pmaxsw */ - case 0x660fef: /* pxor */ - case 0xf20ff0: /* lddqu */ - case 0x660ff1: /* psllw */ - case 0x660ff2: /* pslld */ - case 0x660ff3: /* psllq */ - case 0x660ff4: /* pmuludq */ - case 0x660ff5: /* pmaddwd */ - case 0x660ff6: /* psadbw */ - case 0x660ff8: /* psubb */ - case 0x660ff9: /* psubw */ - case 0x660ffa: /* psubd */ - case 0x660ffb: /* psubq */ - case 0x660ffc: /* paddb */ - case 0x660ffd: /* paddw */ - case 0x660ffe: /* paddd */ - if (i386_record_modrm (&ir)) + ir.addr++; + opcode = (uint32_t) opcode8 | opcode << 8; + goto reswitch_prefix_add; + break; + + case 0x0f10: /* movups */ + case 0x660f10: /* movupd */ + case 0xf30f10: /* movss */ + case 0xf20f10: /* movsd */ + case 0x0f12: /* movlps */ + case 0x660f12: /* movlpd */ + case 0xf30f12: /* movsldup */ + case 0xf20f12: /* movddup */ + case 0x0f14: /* unpcklps */ + case 0x660f14: /* unpcklpd */ + case 0x0f15: /* unpckhps */ + case 0x660f15: /* unpckhpd */ + case 0x0f16: /* movhps */ + case 0x660f16: /* movhpd */ + case 0xf30f16: /* movshdup */ + case 0x0f28: /* movaps */ + case 0x660f28: /* movapd */ + case 0x0f2a: /* cvtpi2ps */ + case 0x660f2a: /* cvtpi2pd */ + case 0xf30f2a: /* cvtsi2ss */ + case 0xf20f2a: /* cvtsi2sd */ + case 0x0f2c: /* cvttps2pi */ + case 0x660f2c: /* cvttpd2pi */ + case 0x0f2d: /* cvtps2pi */ + case 0x660f2d: /* cvtpd2pi */ + case 0x660f3800: /* pshufb */ + case 0x660f3801: /* phaddw */ + case 0x660f3802: /* phaddd */ + case 0x660f3803: /* phaddsw */ + case 0x660f3804: /* pmaddubsw */ + case 0x660f3805: /* phsubw */ + case 0x660f3806: /* phsubd */ + case 0x660f3807: /* phsubsw */ + case 0x660f3808: /* psignb */ + case 0x660f3809: /* psignw */ + case 0x660f380a: /* psignd */ + case 0x660f380b: /* pmulhrsw */ + case 0x660f3810: /* pblendvb */ + case 0x660f3814: /* blendvps */ + case 0x660f3815: /* blendvpd */ + case 0x660f381c: /* pabsb */ + case 0x660f381d: /* pabsw */ + case 0x660f381e: /* pabsd */ + case 0x660f3820: /* pmovsxbw */ + case 0x660f3821: /* pmovsxbd */ + case 0x660f3822: /* pmovsxbq */ + case 0x660f3823: /* pmovsxwd */ + case 0x660f3824: /* pmovsxwq */ + case 0x660f3825: /* pmovsxdq */ + case 0x660f3828: /* pmuldq */ + case 0x660f3829: /* pcmpeqq */ + case 0x660f382a: /* movntdqa */ + case 0x660f3a08: /* roundps */ + case 0x660f3a09: /* roundpd */ + case 0x660f3a0a: /* roundss */ + case 0x660f3a0b: /* roundsd */ + case 0x660f3a0c: /* blendps */ + case 0x660f3a0d: /* blendpd */ + case 0x660f3a0e: /* pblendw */ + case 0x660f3a0f: /* palignr */ + case 0x660f3a20: /* pinsrb */ + case 0x660f3a21: /* insertps */ + case 0x660f3a22: /* pinsrd pinsrq */ + case 0x660f3a40: /* dpps */ + case 0x660f3a41: /* dppd */ + case 0x660f3a42: /* mpsadbw */ + case 0x660f3a60: /* pcmpestrm */ + case 0x660f3a61: /* pcmpestri */ + case 0x660f3a62: /* pcmpistrm */ + case 0x660f3a63: /* pcmpistri */ + case 0x0f51: /* sqrtps */ + case 0x660f51: /* sqrtpd */ + case 0xf20f51: /* sqrtsd */ + case 0xf30f51: /* sqrtss */ + case 0x0f52: /* rsqrtps */ + case 0xf30f52: /* rsqrtss */ + case 0x0f53: /* rcpps */ + case 0xf30f53: /* rcpss */ + case 0x0f54: /* andps */ + case 0x660f54: /* andpd */ + case 0x0f55: /* andnps */ + case 0x660f55: /* andnpd */ + case 0x0f56: /* orps */ + case 0x660f56: /* orpd */ + case 0x0f57: /* xorps */ + case 0x660f57: /* xorpd */ + case 0x0f58: /* addps */ + case 0x660f58: /* addpd */ + case 0xf20f58: /* addsd */ + case 0xf30f58: /* addss */ + case 0x0f59: /* mulps */ + case 0x660f59: /* mulpd */ + case 0xf20f59: /* mulsd */ + case 0xf30f59: /* mulss */ + case 0x0f5a: /* cvtps2pd */ + case 0x660f5a: /* cvtpd2ps */ + case 0xf20f5a: /* cvtsd2ss */ + case 0xf30f5a: /* cvtss2sd */ + case 0x0f5b: /* cvtdq2ps */ + case 0x660f5b: /* cvtps2dq */ + case 0xf30f5b: /* cvttps2dq */ + case 0x0f5c: /* subps */ + case 0x660f5c: /* subpd */ + case 0xf20f5c: /* subsd */ + case 0xf30f5c: /* subss */ + case 0x0f5d: /* minps */ + case 0x660f5d: /* minpd */ + case 0xf20f5d: /* minsd */ + case 0xf30f5d: /* minss */ + case 0x0f5e: /* divps */ + case 0x660f5e: /* divpd */ + case 0xf20f5e: /* divsd */ + case 0xf30f5e: /* divss */ + case 0x0f5f: /* maxps */ + case 0x660f5f: /* maxpd */ + case 0xf20f5f: /* maxsd */ + case 0xf30f5f: /* maxss */ + case 0x660f60: /* punpcklbw */ + case 0x660f61: /* punpcklwd */ + case 0x660f62: /* punpckldq */ + case 0x660f63: /* packsswb */ + case 0x660f64: /* pcmpgtb */ + case 0x660f65: /* pcmpgtw */ + case 0x660f66: /* pcmpgtd */ + case 0x660f67: /* packuswb */ + case 0x660f68: /* punpckhbw */ + case 0x660f69: /* punpckhwd */ + case 0x660f6a: /* punpckhdq */ + case 0x660f6b: /* packssdw */ + case 0x660f6c: /* punpcklqdq */ + case 0x660f6d: /* punpckhqdq */ + case 0x660f6e: /* movd */ + case 0x660f6f: /* movdqa */ + case 0xf30f6f: /* movdqu */ + case 0x660f70: /* pshufd */ + case 0xf20f70: /* pshuflw */ + case 0xf30f70: /* pshufhw */ + case 0x660f74: /* pcmpeqb */ + case 0x660f75: /* pcmpeqw */ + case 0x660f76: /* pcmpeqd */ + case 0x660f7c: /* haddpd */ + case 0xf20f7c: /* haddps */ + case 0x660f7d: /* hsubpd */ + case 0xf20f7d: /* hsubps */ + case 0xf30f7e: /* movq */ + case 0x0fc2: /* cmpps */ + case 0x660fc2: /* cmppd */ + case 0xf20fc2: /* cmpsd */ + case 0xf30fc2: /* cmpss */ + case 0x660fc4: /* pinsrw */ + case 0x0fc6: /* shufps */ + case 0x660fc6: /* shufpd */ + case 0x660fd0: /* addsubpd */ + case 0xf20fd0: /* addsubps */ + case 0x660fd1: /* psrlw */ + case 0x660fd2: /* psrld */ + case 0x660fd3: /* psrlq */ + case 0x660fd4: /* paddq */ + case 0x660fd5: /* pmullw */ + case 0xf30fd6: /* movq2dq */ + case 0x660fd8: /* psubusb */ + case 0x660fd9: /* psubusw */ + case 0x660fda: /* pminub */ + case 0x660fdb: /* pand */ + case 0x660fdc: /* paddusb */ + case 0x660fdd: /* paddusw */ + case 0x660fde: /* pmaxub */ + case 0x660fdf: /* pandn */ + case 0x660fe0: /* pavgb */ + case 0x660fe1: /* psraw */ + case 0x660fe2: /* psrad */ + case 0x660fe3: /* pavgw */ + case 0x660fe4: /* pmulhuw */ + case 0x660fe5: /* pmulhw */ + case 0x660fe6: /* cvttpd2dq */ + case 0xf20fe6: /* cvtpd2dq */ + case 0xf30fe6: /* cvtdq2pd */ + case 0x660fe8: /* psubsb */ + case 0x660fe9: /* psubsw */ + case 0x660fea: /* pminsw */ + case 0x660feb: /* por */ + case 0x660fec: /* paddsb */ + case 0x660fed: /* paddsw */ + case 0x660fee: /* pmaxsw */ + case 0x660fef: /* pxor */ + case 0xf20ff0: /* lddqu */ + case 0x660ff1: /* psllw */ + case 0x660ff2: /* pslld */ + case 0x660ff3: /* psllq */ + case 0x660ff4: /* pmuludq */ + case 0x660ff5: /* pmaddwd */ + case 0x660ff6: /* psadbw */ + case 0x660ff8: /* psubb */ + case 0x660ff9: /* psubw */ + case 0x660ffa: /* psubd */ + case 0x660ffb: /* psubq */ + case 0x660ffc: /* paddb */ + case 0x660ffd: /* paddw */ + case 0x660ffe: /* paddd */ + if (i386_record_modrm (&ir)) return -1; - ir.reg |= rex_r; - if (!i386_xmm_regnum_p (gdbarch, I387_XMM0_REGNUM (tdep) + ir.reg)) - goto no_support; - record_full_arch_list_add_reg (ir.regcache, + ir.reg |= rex_r; + if (!i386_xmm_regnum_p (gdbarch, I387_XMM0_REGNUM (tdep) + ir.reg)) + goto no_support; + record_full_arch_list_add_reg (ir.regcache, I387_XMM0_REGNUM (tdep) + ir.reg); - if ((opcode & 0xfffffffc) == 0x660f3a60) - I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); - break; - - case 0x0f11: /* movups */ - case 0x660f11: /* movupd */ - case 0xf30f11: /* movss */ - case 0xf20f11: /* movsd */ - case 0x0f13: /* movlps */ - case 0x660f13: /* movlpd */ - case 0x0f17: /* movhps */ - case 0x660f17: /* movhpd */ - case 0x0f29: /* movaps */ - case 0x660f29: /* movapd */ - case 0x660f3a14: /* pextrb */ - case 0x660f3a15: /* pextrw */ - case 0x660f3a16: /* pextrd pextrq */ - case 0x660f3a17: /* extractps */ - case 0x660f7f: /* movdqa */ - case 0xf30f7f: /* movdqu */ - if (i386_record_modrm (&ir)) + if ((opcode & 0xfffffffc) == 0x660f3a60) + I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); + break; + + case 0x0f11: /* movups */ + case 0x660f11: /* movupd */ + case 0xf30f11: /* movss */ + case 0xf20f11: /* movsd */ + case 0x0f13: /* movlps */ + case 0x660f13: /* movlpd */ + case 0x0f17: /* movhps */ + case 0x660f17: /* movhpd */ + case 0x0f29: /* movaps */ + case 0x660f29: /* movapd */ + case 0x660f3a14: /* pextrb */ + case 0x660f3a15: /* pextrw */ + case 0x660f3a16: /* pextrd pextrq */ + case 0x660f3a17: /* extractps */ + case 0x660f7f: /* movdqa */ + case 0xf30f7f: /* movdqu */ + if (i386_record_modrm (&ir)) return -1; - if (ir.mod == 3) - { - if (opcode == 0x0f13 || opcode == 0x660f13 - || opcode == 0x0f17 || opcode == 0x660f17) - goto no_support; - ir.rm |= ir.rex_b; - if (!i386_xmm_regnum_p (gdbarch, + if (ir.mod == 3) + { + if (opcode == 0x0f13 || opcode == 0x660f13 + || opcode == 0x0f17 || opcode == 0x660f17) + goto no_support; + ir.rm |= ir.rex_b; + if (!i386_xmm_regnum_p (gdbarch, I387_XMM0_REGNUM (tdep) + ir.rm)) - goto no_support; - record_full_arch_list_add_reg (ir.regcache, + goto no_support; + record_full_arch_list_add_reg (ir.regcache, I387_XMM0_REGNUM (tdep) + ir.rm); - } - else - { - switch (opcode) - { - case 0x660f3a14: - ir.ot = OT_BYTE; - break; - case 0x660f3a15: - ir.ot = OT_WORD; - break; - case 0x660f3a16: - ir.ot = OT_LONG; - break; - case 0x660f3a17: - ir.ot = OT_QUAD; - break; - default: - ir.ot = OT_DQUAD; - break; - } - if (i386_record_lea_modrm (&ir)) - return -1; - } - break; - - case 0x0f2b: /* movntps */ - case 0x660f2b: /* movntpd */ - case 0x0fe7: /* movntq */ - case 0x660fe7: /* movntdq */ - if (ir.mod == 3) - goto no_support; - if (opcode == 0x0fe7) - ir.ot = OT_QUAD; - else - ir.ot = OT_DQUAD; - if (i386_record_lea_modrm (&ir)) - return -1; - break; - - case 0xf30f2c: /* cvttss2si */ - case 0xf20f2c: /* cvttsd2si */ - case 0xf30f2d: /* cvtss2si */ - case 0xf20f2d: /* cvtsd2si */ - case 0xf20f38f0: /* crc32 */ - case 0xf20f38f1: /* crc32 */ - case 0x0f50: /* movmskps */ - case 0x660f50: /* movmskpd */ - case 0x0fc5: /* pextrw */ - case 0x660fc5: /* pextrw */ - case 0x0fd7: /* pmovmskb */ - case 0x660fd7: /* pmovmskb */ - I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.reg | rex_r); - break; - - case 0x0f3800: /* pshufb */ - case 0x0f3801: /* phaddw */ - case 0x0f3802: /* phaddd */ - case 0x0f3803: /* phaddsw */ - case 0x0f3804: /* pmaddubsw */ - case 0x0f3805: /* phsubw */ - case 0x0f3806: /* phsubd */ - case 0x0f3807: /* phsubsw */ - case 0x0f3808: /* psignb */ - case 0x0f3809: /* psignw */ - case 0x0f380a: /* psignd */ - case 0x0f380b: /* pmulhrsw */ - case 0x0f381c: /* pabsb */ - case 0x0f381d: /* pabsw */ - case 0x0f381e: /* pabsd */ - case 0x0f382b: /* packusdw */ - case 0x0f3830: /* pmovzxbw */ - case 0x0f3831: /* pmovzxbd */ - case 0x0f3832: /* pmovzxbq */ - case 0x0f3833: /* pmovzxwd */ - case 0x0f3834: /* pmovzxwq */ - case 0x0f3835: /* pmovzxdq */ - case 0x0f3837: /* pcmpgtq */ - case 0x0f3838: /* pminsb */ - case 0x0f3839: /* pminsd */ - case 0x0f383a: /* pminuw */ - case 0x0f383b: /* pminud */ - case 0x0f383c: /* pmaxsb */ - case 0x0f383d: /* pmaxsd */ - case 0x0f383e: /* pmaxuw */ - case 0x0f383f: /* pmaxud */ - case 0x0f3840: /* pmulld */ - case 0x0f3841: /* phminposuw */ - case 0x0f3a0f: /* palignr */ - case 0x0f60: /* punpcklbw */ - case 0x0f61: /* punpcklwd */ - case 0x0f62: /* punpckldq */ - case 0x0f63: /* packsswb */ - case 0x0f64: /* pcmpgtb */ - case 0x0f65: /* pcmpgtw */ - case 0x0f66: /* pcmpgtd */ - case 0x0f67: /* packuswb */ - case 0x0f68: /* punpckhbw */ - case 0x0f69: /* punpckhwd */ - case 0x0f6a: /* punpckhdq */ - case 0x0f6b: /* packssdw */ - case 0x0f6e: /* movd */ - case 0x0f6f: /* movq */ - case 0x0f70: /* pshufw */ - case 0x0f74: /* pcmpeqb */ - case 0x0f75: /* pcmpeqw */ - case 0x0f76: /* pcmpeqd */ - case 0x0fc4: /* pinsrw */ - case 0x0fd1: /* psrlw */ - case 0x0fd2: /* psrld */ - case 0x0fd3: /* psrlq */ - case 0x0fd4: /* paddq */ - case 0x0fd5: /* pmullw */ - case 0xf20fd6: /* movdq2q */ - case 0x0fd8: /* psubusb */ - case 0x0fd9: /* psubusw */ - case 0x0fda: /* pminub */ - case 0x0fdb: /* pand */ - case 0x0fdc: /* paddusb */ - case 0x0fdd: /* paddusw */ - case 0x0fde: /* pmaxub */ - case 0x0fdf: /* pandn */ - case 0x0fe0: /* pavgb */ - case 0x0fe1: /* psraw */ - case 0x0fe2: /* psrad */ - case 0x0fe3: /* pavgw */ - case 0x0fe4: /* pmulhuw */ - case 0x0fe5: /* pmulhw */ - case 0x0fe8: /* psubsb */ - case 0x0fe9: /* psubsw */ - case 0x0fea: /* pminsw */ - case 0x0feb: /* por */ - case 0x0fec: /* paddsb */ - case 0x0fed: /* paddsw */ - case 0x0fee: /* pmaxsw */ - case 0x0fef: /* pxor */ - case 0x0ff1: /* psllw */ - case 0x0ff2: /* pslld */ - case 0x0ff3: /* psllq */ - case 0x0ff4: /* pmuludq */ - case 0x0ff5: /* pmaddwd */ - case 0x0ff6: /* psadbw */ - case 0x0ff8: /* psubb */ - case 0x0ff9: /* psubw */ - case 0x0ffa: /* psubd */ - case 0x0ffb: /* psubq */ - case 0x0ffc: /* paddb */ - case 0x0ffd: /* paddw */ - case 0x0ffe: /* paddd */ - if (i386_record_modrm (&ir)) + } + else + { + switch (opcode) + { + case 0x660f3a14: + ir.ot = OT_BYTE; + break; + case 0x660f3a15: + ir.ot = OT_WORD; + break; + case 0x660f3a16: + ir.ot = OT_LONG; + break; + case 0x660f3a17: + ir.ot = OT_QUAD; + break; + default: + ir.ot = OT_DQUAD; + break; + } + if (i386_record_lea_modrm (&ir)) + return -1; + } + break; + + case 0x0f2b: /* movntps */ + case 0x660f2b: /* movntpd */ + case 0x0fe7: /* movntq */ + case 0x660fe7: /* movntdq */ + if (ir.mod == 3) + goto no_support; + if (opcode == 0x0fe7) + ir.ot = OT_QUAD; + else + ir.ot = OT_DQUAD; + if (i386_record_lea_modrm (&ir)) return -1; - if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.reg)) - goto no_support; - record_full_arch_list_add_reg (ir.regcache, + break; + + case 0xf30f2c: /* cvttss2si */ + case 0xf20f2c: /* cvttsd2si */ + case 0xf30f2d: /* cvtss2si */ + case 0xf20f2d: /* cvtsd2si */ + case 0xf20f38f0: /* crc32 */ + case 0xf20f38f1: /* crc32 */ + case 0x0f50: /* movmskps */ + case 0x660f50: /* movmskpd */ + case 0x0fc5: /* pextrw */ + case 0x660fc5: /* pextrw */ + case 0x0fd7: /* pmovmskb */ + case 0x660fd7: /* pmovmskb */ + I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.reg | rex_r); + break; + + case 0x0f3800: /* pshufb */ + case 0x0f3801: /* phaddw */ + case 0x0f3802: /* phaddd */ + case 0x0f3803: /* phaddsw */ + case 0x0f3804: /* pmaddubsw */ + case 0x0f3805: /* phsubw */ + case 0x0f3806: /* phsubd */ + case 0x0f3807: /* phsubsw */ + case 0x0f3808: /* psignb */ + case 0x0f3809: /* psignw */ + case 0x0f380a: /* psignd */ + case 0x0f380b: /* pmulhrsw */ + case 0x0f381c: /* pabsb */ + case 0x0f381d: /* pabsw */ + case 0x0f381e: /* pabsd */ + case 0x0f382b: /* packusdw */ + case 0x0f3830: /* pmovzxbw */ + case 0x0f3831: /* pmovzxbd */ + case 0x0f3832: /* pmovzxbq */ + case 0x0f3833: /* pmovzxwd */ + case 0x0f3834: /* pmovzxwq */ + case 0x0f3835: /* pmovzxdq */ + case 0x0f3837: /* pcmpgtq */ + case 0x0f3838: /* pminsb */ + case 0x0f3839: /* pminsd */ + case 0x0f383a: /* pminuw */ + case 0x0f383b: /* pminud */ + case 0x0f383c: /* pmaxsb */ + case 0x0f383d: /* pmaxsd */ + case 0x0f383e: /* pmaxuw */ + case 0x0f383f: /* pmaxud */ + case 0x0f3840: /* pmulld */ + case 0x0f3841: /* phminposuw */ + case 0x0f3a0f: /* palignr */ + case 0x0f60: /* punpcklbw */ + case 0x0f61: /* punpcklwd */ + case 0x0f62: /* punpckldq */ + case 0x0f63: /* packsswb */ + case 0x0f64: /* pcmpgtb */ + case 0x0f65: /* pcmpgtw */ + case 0x0f66: /* pcmpgtd */ + case 0x0f67: /* packuswb */ + case 0x0f68: /* punpckhbw */ + case 0x0f69: /* punpckhwd */ + case 0x0f6a: /* punpckhdq */ + case 0x0f6b: /* packssdw */ + case 0x0f6e: /* movd */ + case 0x0f6f: /* movq */ + case 0x0f70: /* pshufw */ + case 0x0f74: /* pcmpeqb */ + case 0x0f75: /* pcmpeqw */ + case 0x0f76: /* pcmpeqd */ + case 0x0fc4: /* pinsrw */ + case 0x0fd1: /* psrlw */ + case 0x0fd2: /* psrld */ + case 0x0fd3: /* psrlq */ + case 0x0fd4: /* paddq */ + case 0x0fd5: /* pmullw */ + case 0xf20fd6: /* movdq2q */ + case 0x0fd8: /* psubusb */ + case 0x0fd9: /* psubusw */ + case 0x0fda: /* pminub */ + case 0x0fdb: /* pand */ + case 0x0fdc: /* paddusb */ + case 0x0fdd: /* paddusw */ + case 0x0fde: /* pmaxub */ + case 0x0fdf: /* pandn */ + case 0x0fe0: /* pavgb */ + case 0x0fe1: /* psraw */ + case 0x0fe2: /* psrad */ + case 0x0fe3: /* pavgw */ + case 0x0fe4: /* pmulhuw */ + case 0x0fe5: /* pmulhw */ + case 0x0fe8: /* psubsb */ + case 0x0fe9: /* psubsw */ + case 0x0fea: /* pminsw */ + case 0x0feb: /* por */ + case 0x0fec: /* paddsb */ + case 0x0fed: /* paddsw */ + case 0x0fee: /* pmaxsw */ + case 0x0fef: /* pxor */ + case 0x0ff1: /* psllw */ + case 0x0ff2: /* pslld */ + case 0x0ff3: /* psllq */ + case 0x0ff4: /* pmuludq */ + case 0x0ff5: /* pmaddwd */ + case 0x0ff6: /* psadbw */ + case 0x0ff8: /* psubb */ + case 0x0ff9: /* psubw */ + case 0x0ffa: /* psubd */ + case 0x0ffb: /* psubq */ + case 0x0ffc: /* paddb */ + case 0x0ffd: /* paddw */ + case 0x0ffe: /* paddd */ + if (i386_record_modrm (&ir)) + return -1; + if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.reg)) + goto no_support; + record_full_arch_list_add_reg (ir.regcache, I387_MM0_REGNUM (tdep) + ir.reg); - break; + break; - case 0x0f71: /* psllw */ - case 0x0f72: /* pslld */ - case 0x0f73: /* psllq */ - if (i386_record_modrm (&ir)) + case 0x0f71: /* psllw */ + case 0x0f72: /* pslld */ + case 0x0f73: /* psllq */ + if (i386_record_modrm (&ir)) return -1; - if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.rm)) - goto no_support; - record_full_arch_list_add_reg (ir.regcache, + if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.rm)) + goto no_support; + record_full_arch_list_add_reg (ir.regcache, I387_MM0_REGNUM (tdep) + ir.rm); - break; + break; - case 0x660f71: /* psllw */ - case 0x660f72: /* pslld */ - case 0x660f73: /* psllq */ - if (i386_record_modrm (&ir)) + case 0x660f71: /* psllw */ + case 0x660f72: /* pslld */ + case 0x660f73: /* psllq */ + if (i386_record_modrm (&ir)) return -1; - ir.rm |= ir.rex_b; - if (!i386_xmm_regnum_p (gdbarch, I387_XMM0_REGNUM (tdep) + ir.rm)) - goto no_support; - record_full_arch_list_add_reg (ir.regcache, + ir.rm |= ir.rex_b; + if (!i386_xmm_regnum_p (gdbarch, I387_XMM0_REGNUM (tdep) + ir.rm)) + goto no_support; + record_full_arch_list_add_reg (ir.regcache, I387_XMM0_REGNUM (tdep) + ir.rm); - break; + break; - case 0x0f7e: /* movd */ - case 0x660f7e: /* movd */ - if (i386_record_modrm (&ir)) + case 0x0f7e: /* movd */ + case 0x660f7e: /* movd */ + if (i386_record_modrm (&ir)) return -1; - if (ir.mod == 3) - I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b); - else - { - if (ir.dflag == 2) - ir.ot = OT_QUAD; - else - ir.ot = OT_LONG; - if (i386_record_lea_modrm (&ir)) - return -1; - } - break; - - case 0x0f7f: /* movq */ - if (i386_record_modrm (&ir)) + if (ir.mod == 3) + I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b); + else + { + if (ir.dflag == 2) + ir.ot = OT_QUAD; + else + ir.ot = OT_LONG; + if (i386_record_lea_modrm (&ir)) + return -1; + } + break; + + case 0x0f7f: /* movq */ + if (i386_record_modrm (&ir)) return -1; - if (ir.mod == 3) - { - if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.rm)) - goto no_support; - record_full_arch_list_add_reg (ir.regcache, + if (ir.mod == 3) + { + if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.rm)) + goto no_support; + record_full_arch_list_add_reg (ir.regcache, I387_MM0_REGNUM (tdep) + ir.rm); - } - else - { - ir.ot = OT_QUAD; - if (i386_record_lea_modrm (&ir)) - return -1; - } - break; - - case 0xf30fb8: /* popcnt */ - if (i386_record_modrm (&ir)) + } + else + { + ir.ot = OT_QUAD; + if (i386_record_lea_modrm (&ir)) + return -1; + } + break; + + case 0xf30fb8: /* popcnt */ + if (i386_record_modrm (&ir)) return -1; - I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.reg); - I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); - break; + I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.reg); + I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); + break; - case 0x660fd6: /* movq */ - if (i386_record_modrm (&ir)) + case 0x660fd6: /* movq */ + if (i386_record_modrm (&ir)) return -1; - if (ir.mod == 3) - { - ir.rm |= ir.rex_b; - if (!i386_xmm_regnum_p (gdbarch, + if (ir.mod == 3) + { + ir.rm |= ir.rex_b; + if (!i386_xmm_regnum_p (gdbarch, I387_XMM0_REGNUM (tdep) + ir.rm)) - goto no_support; - record_full_arch_list_add_reg (ir.regcache, + goto no_support; + record_full_arch_list_add_reg (ir.regcache, I387_XMM0_REGNUM (tdep) + ir.rm); - } - else - { - ir.ot = OT_QUAD; - if (i386_record_lea_modrm (&ir)) - return -1; - } - break; - - case 0x660f3817: /* ptest */ - case 0x0f2e: /* ucomiss */ - case 0x660f2e: /* ucomisd */ - case 0x0f2f: /* comiss */ - case 0x660f2f: /* comisd */ - I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); - break; - - case 0x0ff7: /* maskmovq */ - regcache_raw_read_unsigned (ir.regcache, - ir.regmap[X86_RECORD_REDI_REGNUM], - &addr); - if (record_full_arch_list_add_mem (addr, 64)) - return -1; - break; - - case 0x660ff7: /* maskmovdqu */ - regcache_raw_read_unsigned (ir.regcache, - ir.regmap[X86_RECORD_REDI_REGNUM], - &addr); - if (record_full_arch_list_add_mem (addr, 128)) - return -1; - break; - - default: - goto no_support; - break; - } + } + else + { + ir.ot = OT_QUAD; + if (i386_record_lea_modrm (&ir)) + return -1; + } + break; + + case 0x660f3817: /* ptest */ + case 0x0f2e: /* ucomiss */ + case 0x660f2e: /* ucomisd */ + case 0x0f2f: /* comiss */ + case 0x660f2f: /* comisd */ + I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM); + break; + + case 0x0ff7: /* maskmovq */ + regcache_raw_read_unsigned (ir.regcache, + ir.regmap[X86_RECORD_REDI_REGNUM], + &addr); + if (record_full_arch_list_add_mem (addr, 64)) + return -1; + break; + + case 0x660ff7: /* maskmovdqu */ + regcache_raw_read_unsigned (ir.regcache, + ir.regmap[X86_RECORD_REDI_REGNUM], + &addr); + if (record_full_arch_list_add_mem (addr, 128)) + return -1; + break; + + default: + goto no_support; + break; + } break; default: @@ -8150,9 +8150,9 @@ reswitch_prefix_add: no_support: printf_unfiltered (_("Process record does not support instruction 0x%02x " - "at address %s.\n"), - (unsigned int) (opcode), - paddress (gdbarch, ir.orig_addr)); + "at address %s.\n"), + (unsigned int) (opcode), + paddress (gdbarch, ir.orig_addr)); return -1; } |