Re: [PATCH v4 00/16] Initial Prefixed Instruction support
From: Jordan Niethe <hidden>
Date: 2020-03-24 02:56:28
On Mon, Mar 23, 2020 at 9:21 PM Nicholas Piggin [off-list ref] wrote:
Jordan Niethe's on March 23, 2020 7:25 pm:quoted
On Mon, Mar 23, 2020 at 5:22 PM Nicholas Piggin [off-list ref] wrote:quoted
Jordan Niethe's on March 20, 2020 3:17 pm:quoted
A future revision of the ISA will introduce prefixed instructions. A prefixed instruction is composed of a 4-byte prefix followed by a 4-byte suffix. All prefixes have the major opcode 1. A prefix will never be a valid word instruction. A suffix may be an existing word instruction or a new instruction. This series enables prefixed instructions and extends the instruction emulation to support them. Then the places where prefixed instructions might need to be emulated are updated. The series is based on top of: https://patchwork.ozlabs.org/patch/1232619/ as this will effect kprobes. v4 is based on feedback from Nick Piggins, Christophe Leroy and Daniel Axtens. The major changes: - Move xmon breakpoints from data section to text section - Introduce a data type for instructions on powerpcThanks for doing this, looks like a lot of work, I hope it works out :)Yes it did end up touching a lot of places. I started thinking that that maybe it would be simpler to just use a u64 instead of the struct for instructions. If we always keep the word instruction / prefix in the lower bytes, all of the current masking should still work and we can use operators again instead of ppc_inst_equal(), etc.Yeah.. I think now that you've done it, I prefer it this way.
Sorry, just to be clear which way do you mean?
quoted
It also makes printing easier. We could just #define INST_FMT %llx or #define INST_FMT %x on powerpc32 and use that for printing out instructions.Well, not sure about that. Would it make endian concerns more complicated? Print format for prefix might be '%016llx', but we don't want that for all instructions only prefixed ones, and I don't know if that is the way to go either.
Hm yeah that is true.
We'll want to adopt some convention for displaying prefixed instruction bytes, but I don't know what what works best. I wonder if binutils or any userspace tools have a convention.
binutils-gdb upstream has supports disassembling prefixed instructions. Here is what objdump looks like: 44: 00 00 00 60 nop 48: 00 00 00 07 pnop 4c: 00 00 00 00 50: 01 00 20 39 li r9,1 54: 00 00 00 06 paddi r4,r9,3 58: 03 00 89 38 5c: 00 00 62 3c addis r3,r2,0
Which reminds me, you might have missed show_instructions()? Although maybe you don't need that until we start using them in the kernel.
You are right I missed that here.
Thanks, Nick