1 /* microblaze-opcm.h -- Header used in microblaze-opc.h
3 Copyright (C) 2009-2015 Free Software Foundation, Inc.
5 This file is part of the GNU opcodes library.
7 This library is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
12 It is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
15 License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this file; see the file COPYING. If not, write to the
19 Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
20 MA 02110-1301, USA. */
23 #ifndef MICROBLAZE_OPCM
24 #define MICROBLAZE_OPCM
28 add
, rsub
, addc
, rsubc
, addk
, rsubk
, addkc
, rsubkc
, clz
, cmp
, cmpu
,
29 addi
, rsubi
, addic
, rsubic
, addik
, rsubik
, addikc
, rsubikc
, mul
,
30 mulh
, mulhu
, mulhsu
,swapb
,swaph
,
31 idiv
, idivu
, bsll
, bsra
, bsrl
, get
, put
, nget
, nput
, cget
, cput
,
32 ncget
, ncput
, muli
, bslli
, bsrai
, bsrli
, mului
,
33 /* 'or/and/xor' are C++ keywords. */
34 microblaze_or
, microblaze_and
, microblaze_xor
,
35 andn
, pcmpbf
, pcmpbc
, pcmpeq
, pcmpne
, sra
, src
, srl
, sext8
, sext16
,
36 wic
, wdc
, wdcclear
, wdcflush
, mts
, mfs
, mbar
, br
, brd
,
37 brld
, bra
, brad
, brald
, microblaze_brk
, beq
, beqd
, bne
, bned
, blt
,
38 bltd
, ble
, bled
, bgt
, bgtd
, bge
, bged
, ori
, andi
, xori
, andni
,
39 imm
, rtsd
, rtid
, rtbd
, rted
, bri
, brid
, brlid
, brai
, braid
, bralid
,
40 brki
, beqi
, beqid
, bnei
, bneid
, blti
, bltid
, blei
, bleid
, bgti
,
41 bgtid
, bgei
, bgeid
, lbu
, lbur
, lhu
, lhur
, lw
, lwr
, lwx
, sb
, sbr
, sh
,
42 shr
, sw
, swr
, swx
, lbui
, lhui
, lwi
,
43 sbi
, shi
, swi
, msrset
, msrclr
, tuqula
, fadd
, frsub
, fmul
, fdiv
,
44 fcmp_lt
, fcmp_eq
, fcmp_le
, fcmp_gt
, fcmp_ne
, fcmp_ge
, fcmp_un
, flt
,
46 tget
, tcget
, tnget
, tncget
, tput
, tcput
, tnput
, tncput
,
47 eget
, ecget
, neget
, necget
, eput
, ecput
, neput
, necput
,
48 teget
, tecget
, tneget
, tnecget
, teput
, tecput
, tneput
, tnecput
,
49 aget
, caget
, naget
, ncaget
, aput
, caput
, naput
, ncaput
,
50 taget
, tcaget
, tnaget
, tncaget
, taput
, tcaput
, tnaput
, tncaput
,
51 eaget
, ecaget
, neaget
, necaget
, eaput
, ecaput
, neaput
, necaput
,
52 teaget
, tecaget
, tneaget
, tnecaget
, teaput
, tecaput
, tneaput
, tnecaput
,
53 getd
, tgetd
, cgetd
, tcgetd
, ngetd
, tngetd
, ncgetd
, tncgetd
,
54 putd
, tputd
, cputd
, tcputd
, nputd
, tnputd
, ncputd
, tncputd
,
55 egetd
, tegetd
, ecgetd
, tecgetd
, negetd
, tnegetd
, necgetd
, tnecgetd
,
56 eputd
, teputd
, ecputd
, tecputd
, neputd
, tneputd
, necputd
, tnecputd
,
57 agetd
, tagetd
, cagetd
, tcagetd
, nagetd
, tnagetd
, ncagetd
, tncagetd
,
58 aputd
, taputd
, caputd
, tcaputd
, naputd
, tnaputd
, ncaputd
, tncaputd
,
59 eagetd
, teagetd
, ecagetd
, tecagetd
, neagetd
, tneagetd
, necagetd
, tnecagetd
,
60 eaputd
, teaputd
, ecaputd
, tecaputd
, neaputd
, tneaputd
, necaputd
, tnecaputd
,
64 enum microblaze_instr_type
66 arithmetic_inst
, logical_inst
, mult_inst
, div_inst
, branch_inst
,
67 return_inst
, immediate_inst
, special_inst
, memory_load_inst
,
68 memory_store_inst
, barrel_shift_inst
, anyware_inst
71 #define INST_WORD_SIZE 4
73 /* Gen purpose regs go from 0 to 31. */
74 /* Mask is reg num - max_reg_num, ie reg_num - 32 in this case. */
76 #define REG_PC_MASK 0x8000
77 #define REG_MSR_MASK 0x8001
78 #define REG_EAR_MASK 0x8003
79 #define REG_ESR_MASK 0x8005
80 #define REG_FSR_MASK 0x8007
81 #define REG_BTR_MASK 0x800b
82 #define REG_EDR_MASK 0x800d
83 #define REG_PVR_MASK 0xa000
84 #define REG_SLR_MASK 0x8800
85 #define REG_SHR_MASK 0x8802
87 #define REG_PID_MASK 0x9000
88 #define REG_ZPR_MASK 0x9001
89 #define REG_TLBX_MASK 0x9002
90 #define REG_TLBLO_MASK 0x9003
91 #define REG_TLBHI_MASK 0x9004
92 #define REG_TLBSX_MASK 0x9005
97 #define MIN_PVR_REGNUM 0
98 #define MAX_PVR_REGNUM 15
100 #define REG_PC 32 /* PC. */
101 #define REG_MSR 33 /* Machine status reg. */
102 #define REG_EAR 35 /* Exception reg. */
103 #define REG_ESR 37 /* Exception reg. */
104 #define REG_FSR 39 /* FPU Status reg. */
105 #define REG_BTR 43 /* Branch Target reg. */
106 #define REG_EDR 45 /* Exception reg. */
107 #define REG_SHR 50 /* Stack High reg. */
108 #define REG_SLR 51 /* Stack Low reg. */
109 #define REG_PVR 40960 /* Program Verification reg. */
111 #define REG_PID 36864 /* MMU: Process ID reg. */
112 #define REG_ZPR 36865 /* MMU: Zone Protect reg. */
113 #define REG_TLBX 36866 /* MMU: TLB Index reg. */
114 #define REG_TLBLO 36867 /* MMU: TLB Low reg. */
115 #define REG_TLBHI 36868 /* MMU: TLB High reg. */
116 #define REG_TLBSX 36869 /* MMU: TLB Search Index reg. */
118 /* Alternate names for gen purpose regs. */
119 #define REG_SP 1 /* stack pointer. */
120 #define REG_ROSDP 2 /* read-only small data pointer. */
121 #define REG_RWSDP 13 /* read-write small data pointer. */
123 /* Assembler Register - Used in Delay Slot Optimization. */
127 #define RD_LOW 21 /* Low bit for RD. */
128 #define RA_LOW 16 /* Low bit for RA. */
129 #define RB_LOW 11 /* Low bit for RB. */
130 #define IMM_LOW 0 /* Low bit for immediate. */
131 #define IMM_MBAR 21 /* low bit for mbar instruction. */
133 #define RD_MASK 0x03E00000
134 #define RA_MASK 0x001F0000
135 #define RB_MASK 0x0000F800
136 #define IMM_MASK 0x0000FFFF
138 /* Imm mask for barrel shifts. */
139 #define IMM5_MASK 0x0000001F
141 /* Imm mask for mbar. */
142 #define IMM5_MBAR_MASK 0x03E00000
144 /* FSL imm mask for get, put instructions. */
145 #define RFSL_MASK 0x000000F
147 /* Imm mask for msrset, msrclr instructions. */
148 #define IMM15_MASK 0x00007FFF
150 #endif /* MICROBLAZE-OPCM */