This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
RE: [PATCH][MIPS] Add Global INValidate instructions
- From: "Maciej W. Rozycki" <macro at mips dot com>
- To: Faraz Shahbazker <Faraz dot Shahbazker at mips dot com>
- Cc: "binutils at sourceware dot org" <binutils at sourceware dot org>, Matthew Fortune <Matthew dot Fortune at mips dot com>
- Date: Tue, 9 Jan 2018 18:52:11 +0000
- Subject: RE: [PATCH][MIPS] Add Global INValidate instructions
- Authentication-results: sourceware.org; auth=none
- References: <1d3f8dba-f97e-5471-a2c0-8d9282e87724@mips.com> <4219DBDA9D67EF429BA5C9BBA5A8E9C6031AB1C5@MIPSMAIL01.mipstec.com>
Hi Faraz,
> Resubmitting with correct format.
Thank you!
> The following patch adds support for the Global INValidate (GINV)
> instructions in Release 6 of the MIPS Architecture. The changes are:
> * New instruction GINVI, GINVT: enabled by option `-mginv'.
> * New instruction GINVGT: enabled by `-mginv -mvirt'.
> * Bit-17 in MIPS.abiflags is set when GINV extension is enabled.
>
> The new ginv* instructions are described in Section 3.2 of the MIPS
> Instruction Set v6.06
> (https://www.mips.com/?do-download=the-mips32-instruction-set-v6-06)
Same as with the CRC patch -- please separate the commit description
(which will be reviewed) from any extra discussion, and avoid volatile web
links.
> This patch cannot be committed yet, since copyright assignment to FSF
> from the new MIPS entity is still pending. Please review and approve
> for a future commit.
This change also triggers failures:
mips-sgi-irix6 +FAIL: MIPS Global INValidate instructions (mips32r6)
mips-sgi-irix6 +FAIL: MIPS Global INValidate instructions disassembly (mips32r6)
mips-sgi-irix6 +FAIL: mips ginv-error
mips-sgi-irix6 +FAIL: mips ginv-virt-error
mips64-freebsd +FAIL: MIPS Global INValidate instructions (mips32r6)
mips64-freebsd +FAIL: MIPS Global INValidate instructions disassembly (mips32r6)
mips64-freebsd +FAIL: mips ginv-error
mips64-freebsd +FAIL: mips ginv-virt-error
mips64-img-linux +FAIL: MIPS Global INValidate instructions (mips32r6)
mips64-img-linux +FAIL: MIPS Global INValidate instructions disassembly (mips32r6)
mips64-img-linux +FAIL: mips ginv-error
mips64-img-linux +FAIL: mips ginv-virt-error
mips64-linux +FAIL: MIPS Global INValidate instructions (mips32r6)
mips64-linux +FAIL: MIPS Global INValidate instructions disassembly (mips32r6)
mips64-linux +FAIL: mips ginv-error
mips64-linux +FAIL: mips ginv-virt-error
mips64-mti-linux +FAIL: MIPS Global INValidate instructions (mips32r6)
mips64-mti-linux +FAIL: MIPS Global INValidate instructions disassembly (mips32r6)
mips64-mti-linux +FAIL: mips ginv-error
mips64-mti-linux +FAIL: mips ginv-virt-error
mips64-openbsd +FAIL: MIPS Global INValidate instructions (mips32r6)
mips64-openbsd +FAIL: MIPS Global INValidate instructions (mips64r6)
mips64-openbsd +FAIL: MIPS Global INValidate instructions disassembly (mips32r6)
mips64-openbsd +FAIL: MIPS Global INValidate instructions disassembly (mips64r6)
mips64-openbsd +FAIL: mips ginv-error
mips64-openbsd +FAIL: mips ginv-virt-error
mips64el-freebsd +FAIL: MIPS Global INValidate instructions (mips32r6)
mips64el-freebsd +FAIL: MIPS Global INValidate instructions disassembly (mips32r6)
mips64el-freebsd +FAIL: mips ginv-error
mips64el-freebsd +FAIL: mips ginv-virt-error
mips64el-img-linux +FAIL: MIPS Global INValidate instructions (mips32r6)
mips64el-img-linux +FAIL: MIPS Global INValidate instructions disassembly (mips32r6)
mips64el-img-linux +FAIL: mips ginv-error
mips64el-img-linux +FAIL: mips ginv-virt-error
mips64el-linux +FAIL: MIPS Global INValidate instructions (mips32r6)
mips64el-linux +FAIL: MIPS Global INValidate instructions disassembly (mips32r6)
mips64el-linux +FAIL: mips ginv-error
mips64el-linux +FAIL: mips ginv-virt-error
mips64el-mti-linux +FAIL: MIPS Global INValidate instructions (mips32r6)
mips64el-mti-linux +FAIL: MIPS Global INValidate instructions disassembly (mips32r6)
mips64el-mti-linux +FAIL: mips ginv-error
mips64el-mti-linux +FAIL: mips ginv-virt-error
mips64el-openbsd +FAIL: MIPS Global INValidate instructions (mips32r6)
mips64el-openbsd +FAIL: MIPS Global INValidate instructions (mips64r6)
mips64el-openbsd +FAIL: MIPS Global INValidate instructions disassembly (mips32r6)
mips64el-openbsd +FAIL: MIPS Global INValidate instructions disassembly (mips64r6)
mips64el-openbsd +FAIL: mips ginv-error
mips64el-openbsd +FAIL: mips ginv-virt-error
-- please address them.
> diff --git a/include/elf/mips.h b/include/elf/mips.h
> index a4bea43..d98b312 100644
> --- a/include/elf/mips.h
> +++ b/include/elf/mips.h
> @@ -1235,7 +1235,8 @@ extern void bfd_mips_elf_swap_abiflags_v0_out
> #define AFL_ASE_XPA 0x00001000 /* XPA ASE. */
> #define AFL_ASE_DSPR3 0x00002000 /* DSP R3 ASE. */
> #define AFL_ASE_MIPS16E2 0x00004000 /* MIPS16e2 ASE. */
> -#define AFL_ASE_MASK 0x00007fff /* All ASEs. */
> +#define AFL_ASE_GINV 0x00020000 /* GINV ASE. */
> +#define AFL_ASE_MASK 0x00027fff /* All ASEs. */
There is a gap in bit allocation here, why?
> diff --git a/include/opcode/mips.h b/include/opcode/mips.h
> index ceae9ec..c163846 100644
> --- a/include/opcode/mips.h
> +++ b/include/opcode/mips.h
> @@ -989,6 +989,9 @@ mips_opcode_32bit_p (const struct mips_opcode *mo)
> "-A" symbolic offset (-262144 .. 262143) << 2 at bit 0
> "-B" symbolic offset (-131072 .. 131071) << 3 at bit 0
>
> + GINV ASE usage:
> + "+\" 2 bit Global TLB invalidate type at bit 8
You need to update the list of extension character sequences below
accordingly.
> @@ -1294,6 +1297,11 @@ static const unsigned int mips_isa_table[] = {
> /* The Virtualization ASE has eXtended Physical Addressing (XPA)
> instructions which are only valid when both ASEs are enabled. */
> #define ASE_XPA_VIRT 0x00020000
> +/* Global INValidate Extension. */
> +#define ASE_GINV 0x00800000
> +/* The Virtualization ASE has Global INValidate extension instructions
> + which are only valid when both ASEs are enabled. */
> +#define ASE_GINV_VIRT 0x01000000
Again there is a gap in bit allocation here, why?
> @@ -2308,6 +2316,9 @@ extern const int bfd_mips16_num_opcodes;
> "+*" 5-bit register vector element index at bit 16
> "+|" 8-bit mask at bit 16
>
> + GINV ASE usage:
> + "+\" 2 bit Global TLB invalidate type at bit 8
And likewise you need to update the list of extension character sequences
below accordingly.
As discussed off-list this submission has similar formatting issues as
your CRC change, so please address them accordingly when reposting.
Maciej