Brad Bishop | 26bdd44 | 2019-08-16 17:08:17 -0400 | [diff] [blame] | 1 | From ad671256112cfee47871e91c6d390daea1b8fa2f Mon Sep 17 00:00:00 2001 |
Brad Bishop | 286d45c | 2018-10-02 15:21:57 -0400 | [diff] [blame] | 2 | From: David Holsgrove <david.holsgrove@xilinx.com> |
Brad Bishop | 26bdd44 | 2019-08-16 17:08:17 -0400 | [diff] [blame] | 3 | Date: Wed, 8 May 2013 11:03:36 +1000 |
| 4 | Subject: [PATCH] Add wdc.ext.clear and wdc.ext.flush insns |
Brad Bishop | 286d45c | 2018-10-02 15:21:57 -0400 | [diff] [blame] | 5 | |
| 6 | Added two new instructions, wdc.ext.clear and wdc.ext.flush, |
| 7 | to enable MicroBlaze to flush an external cache, which is |
| 8 | used with the new coherency support for multiprocessing. |
| 9 | |
Brad Bishop | 286d45c | 2018-10-02 15:21:57 -0400 | [diff] [blame] | 10 | Signed-off-by: Nagaraju Mekala <nagaraju.mekala@xilinx.com> |
Brad Bishop | 26bdd44 | 2019-08-16 17:08:17 -0400 | [diff] [blame] | 11 | Signed-off-by: David Holsgrove <david.holsgrove@xilinx.com> |
Brad Bishop | 286d45c | 2018-10-02 15:21:57 -0400 | [diff] [blame] | 12 | |
| 13 | --- |
| 14 | opcodes/microblaze-opc.h | 5 ++++- |
| 15 | opcodes/microblaze-opcm.h | 4 ++-- |
| 16 | 2 files changed, 6 insertions(+), 3 deletions(-) |
| 17 | |
| 18 | diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h |
Brad Bishop | 26bdd44 | 2019-08-16 17:08:17 -0400 | [diff] [blame] | 19 | index 62ee3c9..865151f 100644 |
Brad Bishop | 286d45c | 2018-10-02 15:21:57 -0400 | [diff] [blame] | 20 | --- a/opcodes/microblaze-opc.h |
| 21 | +++ b/opcodes/microblaze-opc.h |
| 22 | @@ -91,6 +91,7 @@ |
| 23 | #define OPCODE_MASK_H3 0xFC000600 /* High 6 bits and bits 21, 22. */ |
| 24 | #define OPCODE_MASK_H32 0xFC00FC00 /* High 6 bits and bit 16-21. */ |
| 25 | #define OPCODE_MASK_H34B 0xFC0000FF /* High 6 bits and low 8 bits. */ |
| 26 | +#define OPCODE_MASK_H35B 0xFC0004FF /* High 6 bits and low 9 bits. */ |
| 27 | #define OPCODE_MASK_H34C 0xFC0007E0 /* High 6 bits and bits 21-26. */ |
| 28 | |
| 29 | /* New Mask for msrset, msrclr insns. */ |
| 30 | @@ -101,7 +102,7 @@ |
| 31 | #define DELAY_SLOT 1 |
| 32 | #define NO_DELAY_SLOT 0 |
| 33 | |
| 34 | -#define MAX_OPCODES 289 |
| 35 | +#define MAX_OPCODES 291 |
| 36 | |
| 37 | struct op_code_struct |
| 38 | { |
| 39 | @@ -174,7 +175,9 @@ struct op_code_struct |
| 40 | {"wic", INST_TYPE_R1_R2_SPECIAL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x90000068, OPCODE_MASK_H34B, wic, special_inst }, |
| 41 | {"wdc", INST_TYPE_R1_R2_SPECIAL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x90000064, OPCODE_MASK_H34B, wdc, special_inst }, |
| 42 | {"wdc.clear", INST_TYPE_R1_R2_SPECIAL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x90000066, OPCODE_MASK_H34B, wdcclear, special_inst }, |
| 43 | + {"wdc.ext.clear", INST_TYPE_R1_R2_SPECIAL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x90000466, OPCODE_MASK_H35B, wdcextclear, special_inst }, |
| 44 | {"wdc.flush", INST_TYPE_R1_R2_SPECIAL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x90000074, OPCODE_MASK_H34B, wdcflush, special_inst }, |
| 45 | + {"wdc.ext.flush", INST_TYPE_R1_R2_SPECIAL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x90000476, OPCODE_MASK_H35B, wdcextflush, special_inst }, |
| 46 | {"mts", INST_TYPE_SPECIAL_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_MTS, 0x9400C000, OPCODE_MASK_H13S, mts, special_inst }, |
| 47 | {"mfs", INST_TYPE_RD_SPECIAL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_MFS, 0x94008000, OPCODE_MASK_H23S, mfs, special_inst }, |
| 48 | {"br", INST_TYPE_R2, INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x98000000, OPCODE_MASK_H124, br, branch_inst }, |
| 49 | diff --git a/opcodes/microblaze-opcm.h b/opcodes/microblaze-opcm.h |
Brad Bishop | 26bdd44 | 2019-08-16 17:08:17 -0400 | [diff] [blame] | 50 | index 5a2d3b0..42f3dd3 100644 |
Brad Bishop | 286d45c | 2018-10-02 15:21:57 -0400 | [diff] [blame] | 51 | --- a/opcodes/microblaze-opcm.h |
| 52 | +++ b/opcodes/microblaze-opcm.h |
| 53 | @@ -33,8 +33,8 @@ enum microblaze_instr |
| 54 | /* 'or/and/xor' are C++ keywords. */ |
| 55 | microblaze_or, microblaze_and, microblaze_xor, |
| 56 | andn, pcmpbf, pcmpbc, pcmpeq, pcmpne, sra, src, srl, sext8, sext16, |
| 57 | - wic, wdc, wdcclear, wdcflush, mts, mfs, mbar, br, brd, |
| 58 | - brld, bra, brad, brald, microblaze_brk, beq, beqd, bne, bned, blt, |
| 59 | + wic, wdc, wdcclear, wdcextclear, wdcflush, wdcextflush, mts, mfs, mbar, br, |
| 60 | + brd, brld, bra, brad, brald, microblaze_brk, beq, beqd, bne, bned, blt, |
| 61 | bltd, ble, bled, bgt, bgtd, bge, bged, ori, andi, xori, andni, |
| 62 | imm, rtsd, rtid, rtbd, rted, bri, brid, brlid, brai, braid, bralid, |
| 63 | brki, beqi, beqid, bnei, bneid, blti, bltid, blei, bleid, bgti, |