README.models revision 1.5.18.2 1 1.5.18.2 jdolecek # $NetBSD: README.models,v 1.5.18.2 2017/12/03 11:36:25 jdolecek Exp $
2 1.5.18.2 jdolecek
3 1.5.18.2 jdolecek MIPS models and architecture levels
4 1.5.18.2 jdolecek -----------------------------------
5 1.5.18.2 jdolecek
6 1.5.18.2 jdolecek Since this is a complex and confusing topic and there's a shortage of
7 1.5.18.2 jdolecek information (especially, a shortage of reliable information), I'm
8 1.5.18.2 jdolecek creating this document as a reference for people doing MIPS stuff on
9 1.5.18.2 jdolecek NetBSD (and elsewhere).
10 1.5.18.2 jdolecek
11 1.5.18.2 jdolecek Citations appear in []. With luck all important facts have citations.
12 1.5.18.2 jdolecek
13 1.5.18.2 jdolecek
14 1.5.18.2 jdolecek ------------------------------------------------------------
15 1.5.18.2 jdolecek 1. Architecture levels.
16 1.5.18.2 jdolecek
17 1.5.18.2 jdolecek These architecture levels exist:
18 1.5.18.2 jdolecek
19 1.5.18.2 jdolecek 32-bit 64-bit
20 1.5.18.2 jdolecek
21 1.5.18.2 jdolecek MIPS-I
22 1.5.18.2 jdolecek MIPS-II
23 1.5.18.2 jdolecek MIPS-III
24 1.5.18.2 jdolecek MIPS-IV
25 1.5.18.2 jdolecek MIPS-V
26 1.5.18.2 jdolecek MIPS32 MIPS64
27 1.5.18.2 jdolecek MIPS32r2 MIPS64r2
28 1.5.18.2 jdolecek MIPS32r3 MIPS64r3
29 1.5.18.2 jdolecek MIPS32r4 MIPS64r4
30 1.5.18.2 jdolecek MIPS32r5 MIPS64r5
31 1.5.18.2 jdolecek MIPS32r6 MIPS64r6
32 1.5.18.2 jdolecek
33 1.5.18.2 jdolecek Note that while MIPS32 is a 32-bit subset of MIPS64, each
34 1.5.18.2 jdolecek corresponding pair of MIPS32rN and MIPS64rN are comparable in age and
35 1.5.18.2 jdolecek properties. Later revisions (further down the list) are mostly supersets
36 1.5.18.2 jdolecek of earlier revisions, although some exceptions exist.
37 1.5.18.2 jdolecek
38 1.5.18.2 jdolecek
39 1.5.18.2 jdolecek ------------------------------------------------------------
40 1.5.18.2 jdolecek 2. CPU models.
41 1.5.18.2 jdolecek
42 1.5.18.2 jdolecek For vintage MIPS these are the standard models as of fall 1996 [idt96
43 1.5.18.2 jdolecek A-198] and the corresponding architecture levels. (There were many
44 1.5.18.2 jdolecek additional models put out by licensees or by the MIPS company itself,
45 1.5.18.2 jdolecek which have model numbers with fewer zeros.)
46 1.5.18.2 jdolecek
47 1.5.18.2 jdolecek R2000 MIPS-I (32-bit) [idt96 1-5]
48 1.5.18.2 jdolecek R3000 MIPS-I (32-bit) [idt96 1-5]
49 1.5.18.2 jdolecek R4000 MIPS-III (64-bit) [idt96 A-197]
50 1.5.18.2 jdolecek R4200 MIPS-III (64-bit) [idt96 A-197]
51 1.5.18.2 jdolecek R4300 MIPS-III (64-bit) [idt96 A-197]
52 1.5.18.2 jdolecek R4400 MIPS-III (64-bit) [idt96 A-197]
53 1.5.18.2 jdolecek R4600 MIPS-III (64-bit) [idt96 A-197]
54 1.5.18.2 jdolecek R5000 MIPS-IV (64-bit) [idt96 1-5]
55 1.5.18.2 jdolecek R6000 MIPS-II ??
56 1.5.18.2 jdolecek R8000 MIPS-IV (64-bit) [idt96 1-5]
57 1.5.18.2 jdolecek R10000 MIPS-IV (64-bit) [idt96 1-5]
58 1.5.18.2 jdolecek R1x000 MIPS-IV (64-bit)
59 1.5.18.2 jdolecek
60 1.5.18.2 jdolecek For later models than this I currently have no information.
61 1.5.18.2 jdolecek
62 1.5.18.2 jdolecek
63 1.5.18.2 jdolecek ------------------------------------------------------------
64 1.5.18.2 jdolecek 3. CPU models present in various systems.
65 1.5.18.2 jdolecek
66 1.5.18.2 jdolecek These are the CPU models found in various systems NetBSD does and
67 1.5.18.2 jdolecek doesn't support. This table also notes endianness; MIPS chips are
68 1.5.18.2 jdolecek bi-endian but are wired up one way or the other on motherboards.
69 1.5.18.2 jdolecek
70 1.5.18.2 jdolecek algor (little-endian [buildsh])
71 1.5.18.2 jdolecek Algorithmics P-4000i ??
72 1.5.18.2 jdolecek Algorithmics P-4032 ??
73 1.5.18.2 jdolecek Algorithmics P-5064 ??
74 1.5.18.2 jdolecek Algorithmics P-6032 ??
75 1.5.18.2 jdolecek arc (little-endian [buildsh])
76 1.5.18.2 jdolecek Acer PICA ??
77 1.5.18.2 jdolecek MIPS Magnum 4000 ??
78 1.5.18.2 jdolecek NEC Image RISCstation ??
79 1.5.18.2 jdolecek NEC Express RISCserver ??
80 1.5.18.2 jdolecek NEC RISCserver 2200 ??
81 1.5.18.2 jdolecek NEC RISCstation 2200 ??
82 1.5.18.2 jdolecek NEC RISCstation 2250 ??
83 1.5.18.2 jdolecek NEC Express5800/230 R4400 PCI presumably R4400 (MIPS-III)
84 1.5.18.2 jdolecek NEC Express5800/240 R4400 EISA presumably R4400 (MIPS-III)
85 1.5.18.2 jdolecek DeskStation Tyne ??
86 1.5.18.2 jdolecek cobalt (little-endian [buildsh])
87 1.5.18.2 jdolecek Qube ... ?? ??
88 1.5.18.2 jdolecek RaQ ... ?? ??
89 1.5.18.2 jdolecek emips (big-endian [buildsh])
90 1.5.18.2 jdolecek ... ?? ??
91 1.5.18.2 jdolecek (see http://research.microsoft.com/en-us/projects/emips/ )
92 1.5.18.2 jdolecek evbmips
93 1.5.18.2 jdolecek Loongson 2F ( gdium, lemote etc. ) more or less LE MIPS-III with
94 1.5.18.2 jdolecek some extensions
95 1.5.18.2 jdolecek xburst ( as in, jz4780, found on CI20 ) LE MIPS32R2 with extensions
96 1.5.18.2 jdolecek ... ?? ?? (various-endian)
97 1.5.18.2 jdolecek ews4800mips (big-endian [buildsh])
98 1.5.18.2 jdolecek EWS4800/350 ??
99 1.5.18.2 jdolecek EWS4800/350F ??
100 1.5.18.2 jdolecek EWS4800/360AD ??
101 1.5.18.2 jdolecek EWS4800/360ADII ??
102 1.5.18.2 jdolecek EWS4800/360SX ??
103 1.5.18.2 jdolecek EWS4800/360EX ??
104 1.5.18.2 jdolecek EWS4800/360 ??
105 1.5.18.2 jdolecek ... ?? ??
106 1.5.18.2 jdolecek hpcmips (big-endian [buildsh])
107 1.5.18.2 jdolecek see http://wiki.netbsd.org/ports/hpcmips/processor_comparison/
108 1.5.18.2 jdolecek mipsco (big-endian [buildsh])
109 1.5.18.2 jdolecek Various MIPS Computer Systems, Inc. see [mipscolist]
110 1.5.18.2 jdolecek Bull DPX/Prostation M-20 ??
111 1.5.18.2 jdolecek newsmips (big-endian [buildsh])
112 1.5.18.2 jdolecek NWS-3470D R3000 (MIPS-I) [portpage]
113 1.5.18.2 jdolecek NWS-3410 R3000 (MIPS-I) [portpage]
114 1.5.18.2 jdolecek NWS-3460 R3000 (MIPS-I) [portpage]
115 1.5.18.2 jdolecek NWS-3710 R3000 (MIPS-I) [portpage]
116 1.5.18.2 jdolecek NWS-3720 R3000 (MIPS-I) [portpage]
117 1.5.18.2 jdolecek NWS-3800 series ??
118 1.5.18.2 jdolecek NWS-4000 series R4600 (MIPS-III) [portpage]
119 1.5.18.2 jdolecek NWS-5000 R4[04]00 (MIPS-III) [portpage]
120 1.5.18.2 jdolecek playstation2 (little-endian [buildsh])
121 1.5.18.2 jdolecek playstation2 R5900
122 1.5.18.2 jdolecek (almost all of MIPS-III + movn/movz) [linux-mips wiki R5900]
123 1.5.18.2 jdolecek pmax (little-endian [buildsh])
124 1.5.18.2 jdolecek DECstation/system 2100 and 3100 R2000 (MIPS-I) [portpage]
125 1.5.18.2 jdolecek DECsystem 5100 R3000 (MIPS-I) [portpage]
126 1.5.18.2 jdolecek Personal DECstation 5000/20, /25, /33 R3000 (MIPS-I) [portpage]
127 1.5.18.2 jdolecek Personal DECstation 5000/50 R4000 (MIPS-III) [portpage]
128 1.5.18.2 jdolecek DECstation/system 5000/120, /125, /133 R3000 (MIPS-I) [portpage]
129 1.5.18.2 jdolecek DECstation/system 5000/150 R4000 (MIPS-III) [portpage]
130 1.5.18.2 jdolecek DECstation/system 5000/200 R3000 (MIPS-I) [portpage]
131 1.5.18.2 jdolecek DECstation/system 5000/240 R3000 (MIPS-I) [portpage]
132 1.5.18.2 jdolecek DECstation/system 5000/260 R4400 (MIPS-III) [portpage]
133 1.5.18.2 jdolecek DECsystem 5900 R3000 (MIPS-I) [portpage]
134 1.5.18.2 jdolecek DECsystem 5900-260 R4400 (MIPS-III) [portpage]
135 1.5.18.2 jdolecek DECsystem 5500 R3000 (MIPS-I) [portpage]
136 1.5.18.2 jdolecek sbmips
137 1.5.18.2 jdolecek BCM91250A (Swarm) evaluation board Broadcomm BCM1250 [portpage]
138 1.5.18.2 jdolecek sgimips (big-endian [buildsh])
139 1.5.18.2 jdolecek 4D/20 ??
140 1.5.18.2 jdolecek 4D/25 ??
141 1.5.18.2 jdolecek Indigo R3000 (MIPS-I) [portpage]
142 1.5.18.2 jdolecek Indigo (R4x00) R4?00 (MIPS-III) [portpage]
143 1.5.18.2 jdolecek 4D/30 ??
144 1.5.18.2 jdolecek 4D/35 ??
145 1.5.18.2 jdolecek Indigo2 (R4x00) R4?00 (MIPS-III) [portpage]
146 1.5.18.2 jdolecek Challenge M ??
147 1.5.18.2 jdolecek Indy (R4x00) R4?00 (MIPS-III) [portpage]
148 1.5.18.2 jdolecek Indy (R5000) R5000 (MIPS-IV) [portpage]
149 1.5.18.2 jdolecek Challenge S (R4x00) R4?00 (MIPS-III) [portpage]
150 1.5.18.2 jdolecek Challenge S (R5000) R5000 (MIPS-IV) [portpage]
151 1.5.18.2 jdolecek R10000 Power Indigo2 R10000 (MIPS-IV) [portpage]
152 1.5.18.2 jdolecek Octane R1x000 (MIPS-IV) [portpage]
153 1.5.18.2 jdolecek O2 (R5000) R5000 (MIPS-IV) [portpage]
154 1.5.18.2 jdolecek O2 (RM5200) RM5200 (MIPS-IV) [portpage]
155 1.5.18.2 jdolecek O2 (R7000) R7000 (MIPS-IV) [portpage]
156 1.5.18.2 jdolecek O2 (R10000) R10000 (MIPS-IV) [portpage]
157 1.5.18.2 jdolecek O2 (R12000) R12000 (MIPS-IV) [portpage]
158 1.5.18.2 jdolecek O2 (R14000) R14000 (MIPS-IV) [portpage]
159 1.5.18.2 jdolecek Fuel R1x000 (MIPS-IV) [portpage]
160 1.5.18.2 jdolecek Tezro R1x000 (MIPS-IV) [portpage]
161 1.5.18.2 jdolecek ... ??
162 1.5.18.2 jdolecek
163 1.5.18.2 jdolecek
164 1.5.18.2 jdolecek ------------------------------------------------------------
165 1.5.18.2 jdolecek 4. FPU properties
166 1.5.18.2 jdolecek
167 1.5.18.2 jdolecek TBD... this is complex and messy (XXX / ??)
168 1.5.18.2 jdolecek
169 1.5.18.2 jdolecek
170 1.5.18.2 jdolecek ------------------------------------------------------------
171 1.5.18.2 jdolecek 5. Exception handling properties
172 1.5.18.2 jdolecek
173 1.5.18.2 jdolecek TBD... (XXX / ??)
174 1.5.18.2 jdolecek
175 1.5.18.2 jdolecek
176 1.5.18.2 jdolecek ------------------------------------------------------------
177 1.5.18.2 jdolecek 6. MMU properties
178 1.5.18.2 jdolecek
179 1.5.18.2 jdolecek TBD... (XXX / ??)
180 1.5.18.2 jdolecek
181 1.5.18.2 jdolecek
182 1.5.18.2 jdolecek ------------------------------------------------------------
183 1.5.18.2 jdolecek 7. Cache properties
184 1.5.18.2 jdolecek
185 1.5.18.2 jdolecek TBD... (XXX / ??)
186 1.5.18.2 jdolecek
187 1.5.18.2 jdolecek
188 1.5.18.2 jdolecek ------------------------------------------------------------
189 1.5.18.2 jdolecek 8. Instruction ordering properties and hazards
190 1.5.18.2 jdolecek
191 1.5.18.2 jdolecek TBD... (XXX / ??)
192 1.5.18.2 jdolecek
193 1.5.18.2 jdolecek In the absence of the SYNC instruction before MIPS-II [idt96 A-172,
194 1.5.18.2 jdolecek mips32insn 215], apparently on a R3000 you can force pending memory
195 1.5.18.2 jdolecek writes to complete by doing an uncached read. [idt96 11-13]
196 1.5.18.2 jdolecek
197 1.5.18.2 jdolecek Apparently also on some models but not others the state of the write
198 1.5.18.2 jdolecek buffer is wired to the coprocessor 0 condition bit and you can also do
199 1.5.18.2 jdolecek this by using the otherwise useless bc0f instruction (branch on
200 1.5.18.2 jdolecek coprocessor 0 false) to loop. [no citation, I found this in passing
201 1.5.18.2 jdolecek the other day with Google while looking for something else]
202 1.5.18.2 jdolecek
203 1.5.18.2 jdolecek
204 1.5.18.2 jdolecek ------------------------------------------------------------
205 1.5.18.2 jdolecek 9. Pipeline hazards
206 1.5.18.2 jdolecek
207 1.5.18.2 jdolecek TBD... (XXX / ??)
208 1.5.18.2 jdolecek
209 1.5.18.2 jdolecek On MIPS-I a load instruction requires an explicit one-cycle wait
210 1.5.18.2 jdolecek before using the result. This restriction was lifted in MIPS-II,
211 1.5.18.2 jdolecek with the addition of an interlock in the pipeline. [idt96 A-2]
212 1.5.18.2 jdolecek
213 1.5.18.2 jdolecek A multiply should not be started within two cycles of a MFHI or MFLO
214 1.5.18.2 jdolecek instruction, as an interrupt that requires restarting the MFHI or MFLO
215 1.5.18.2 jdolecek might (will) get the result from the subsequent multiply. At least on
216 1.5.18.2 jdolecek MIPS-I. [idt96 2-4] I guess this is true for divides as well.
217 1.5.18.2 jdolecek
218 1.5.18.2 jdolecek
219 1.5.18.2 jdolecek ------------------------------------------------------------
220 1.5.18.2 jdolecek 10. Coprocessor 0 hazards
221 1.5.18.2 jdolecek
222 1.5.18.2 jdolecek TBD... (XXX / ??)
223 1.5.18.2 jdolecek
224 1.5.18.2 jdolecek
225 1.5.18.2 jdolecek ----------------------------------------------------------------------
226 1.5.18.2 jdolecek 11. Deprecated/removed material.
227 1.5.18.2 jdolecek
228 1.5.18.2 jdolecek When the exception handling model was changed for MIPS-III
229 1.5.18.2 jdolecek (introducing the ERET instruction) the RFE instruction supporting the
230 1.5.18.2 jdolecek old model was removed. [idt96 A-134]
231 1.5.18.2 jdolecek
232 1.5.18.2 jdolecek Coprocessor 3 (that is, the ability to have a third coprocessor, which
233 1.5.18.2 jdolecek had never been used for anything) was removed in MIPS-III [idt96 A-197].
234 1.5.18.2 jdolecek
235 1.5.18.2 jdolecek The branch likely instructions (e.g. BEQL) were added in MIPS-II
236 1.5.18.2 jdolecek [mips32insn 56] and deprecated not long after, at least by MIPS32
237 1.5.18.2 jdolecek [mips32insn 57] and were removed in release MIPS32 Release 6
238 1.5.18.2 jdolecek [mips32newinsn2a 71].
239 1.5.18.2 jdolecek
240 1.5.18.2 jdolecek SSNOP as a special NOP was deprecated in MIPS32/64 Release 6
241 1.5.18.2 jdolecek [mips32newinsn2a 375] and sequences using SSNOP should include the
242 1.5.18.2 jdolecek new EHB which counts as an SSNOP on older implementations
243 1.5.18.2 jdolecek [mips32newinsn2a 174] ... and possibly SYNC/SYNCI ???
244 1.5.18.2 jdolecek [mips32newinsn2a 394-401]
245 1.5.18.2 jdolecek
246 1.5.18.2 jdolecek ... ??
247 1.5.18.2 jdolecek
248 1.5.18.2 jdolecek ------------------------------------------------------------
249 1.5.18.2 jdolecek 12. Conditional compilation in NetBSD
250 1.5.18.2 jdolecek
251 1.5.18.2 jdolecek TBD... (XXX / ??)
252 1.5.18.2 jdolecek
253 1.5.18.2 jdolecek
254 1.5.18.2 jdolecek ------------------------------------------------------------
255 1.5.18.2 jdolecek References:
256 1.5.18.2 jdolecek
257 1.5.18.2 jdolecek [buildsh] The MACHINE/MACHINE_ARCH architecture table in NetBSD
258 1.5.18.2 jdolecek build.sh.
259 1.5.18.2 jdolecek
260 1.5.18.2 jdolecek [idt96] "IDT MIPS Microprocessor Family Software Reference Manual",
261 1.5.18.2 jdolecek Integrated Device Technology, Version 2.0, dated October 1996.
262 1.5.18.2 jdolecek
263 1.5.18.2 jdolecek [linux-mips wiki] https://www.linux-mips.org/wiki/
264 1.5.18.2 jdolecek
265 1.5.18.2 jdolecek [mips32intro] "MIPS32(TM) Architecture For Programmers Volume I:
266 1.5.18.2 jdolecek Introduction to the MIPS32(TM) Architecture", MIPS
267 1.5.18.2 jdolecek Technologies, Document Number MD00082, Revision 0.95, dated
268 1.5.18.2 jdolecek March 2001. This was apparently an external review version or
269 1.5.18.2 jdolecek something and has been available on the Internet; the final
270 1.5.18.2 jdolecek version, and later revisions, never were. (AFAIK)
271 1.5.18.2 jdolecek
272 1.5.18.2 jdolecek [mips32insn] "MIPS32(TM) Architecture For Programmers Volume II: The
273 1.5.18.2 jdolecek MIPS32(TM) Instruction Set", MIPS Technologies, Document Number
274 1.5.18.2 jdolecek MD00086, Revision 0.95, March 12, 2001. Ditto.
275 1.5.18.2 jdolecek
276 1.5.18.2 jdolecek [mips32newinsn2a] "MIPS32(R) Architecture For Programmers Volume II-A:
277 1.5.18.2 jdolecek The MIPS32(R) Instruction Set Manual", Imagination, Document
278 1.5.18.2 jdolecek Number MD00086, Revision 6.02, dated December 10, 2014.
279 1.5.18.2 jdolecek
280 1.5.18.2 jdolecek [mips32priv] "MIPS32(TM) Architecture For Programmers Volume III: The
281 1.5.18.2 jdolecek MIPS32(TM) Privileged Resource Architecture", Document Number
282 1.5.18.2 jdolecek MD00090, Revision 0.95, dated March 2001. Ditto.
283 1.5.18.2 jdolecek
284 1.5.18.2 jdolecek [portpage] The port page for this NetBSD port on wiki.netbsd.org, or a
285 1.5.18.2 jdolecek subpage. Ideally these references should be replaced with
286 1.5.18.2 jdolecek something less self-referential.
287 1.5.18.2 jdolecek
288 1.5.18.2 jdolecek [mipscolist] List of MIPS Computer Systems, Inc. machines hosted on the
289 1.5.18.2 jdolecek NetBSD web server: https://www.netbsd.org/ports/mipsco/models.html
290 1.5.18.2 jdolecek
291