Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / obp / obp / pkg / fcode / primlist.fth
CommitLineData
920dae64
AT
1\ ========== Copyright Header Begin ==========================================
2\
3\ Hypervisor Software File: primlist.fth
4\
5\ Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
6\
7\ - Do no alter or remove copyright notices
8\
9\ - Redistribution and use of this software in source and binary forms, with
10\ or without modification, are permitted provided that the following
11\ conditions are met:
12\
13\ - Redistribution of source code must retain the above copyright notice,
14\ this list of conditions and the following disclaimer.
15\
16\ - Redistribution in binary form must reproduce the above copyright notice,
17\ this list of conditions and the following disclaimer in the
18\ documentation and/or other materials provided with the distribution.
19\
20\ Neither the name of Sun Microsystems, Inc. or the names of contributors
21\ may be used to endorse or promote products derived from this software
22\ without specific prior written permission.
23\
24\ This software is provided "AS IS," without a warranty of any kind.
25\ ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
26\ INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
27\ PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
28\ MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
29\ ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
30\ DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN
31\ OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
32\ FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
33\ DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
34\ ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
35\ SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
36\
37\ You acknowledge that this software is not designed, licensed or
38\ intended for use in the design, construction, operation or maintenance of
39\ any nuclear facility.
40\
41\ ========== Copyright Header End ============================================
42id: @(#)primlist.fth 2.19 94/09/01
43purpose: FCode token number definitions for primitive (1-byte) FCodes
44copyright: Copyright 1990 Sun Microsystems, Inc. All Rights Reserved
45
46\ === Bootprom tokens (see also sysprims.fth) ============================
47\
48\ Notes: 1) This table is in numerical order.
49\
50\ 2) Syntax for FCode definitions:
51\ ______________________________________
52\ a) | v1 v2 nnn n byte-code: <name> ...
53\ * Version 1 FCodes carried forward into version 2.
54\ ______________________________________
55\ b) | v1 nnn n byte-code: <name> ...
56\ * Obsoleted version 1 fcodes (generate a warning
57\ message when found by the version 2 tokenizer).
58\ ______________________________________
59\ c) | v2 nnn n byte-code: <name> ...
60\ * FCodes new to version 2 (didn't exist in version 1).
61\ ______________________________________
62\ d) |\ nnn n
63\ * FCodes never allocated.
64\ ______________________________________
65\ e) |\ v1 nnn n byte-code: <name> ...
66\ * FCodes intended for version 1 but never released
67\ with version 1 (commented out of version 1 source).
68\ ______________________________________
69\ f) |\ v1 v2 nnn n byte-code: <name> ...
70\ * Reserved FCodes.
71\
72\
73\ 3) The above syntax allows us to keep obsoleted words, but at
74\ the same time to alert s-bus developer as to their obsolence.
75\
76\ 4) While compling the boot prom "v1" and "v2" are defined as
77\ noops so backward compatiblity can be achieved with either
78\ a or b above.
79\
80\
81\ ========================================================================
82
83
84
85\ === basic FCodes =======================================================
86
87hex
88v1 v2 000 0 byte-code: end0 ( -- )
89
90\ v1 v2 001 0 byte-code: table1
91\ v1 v2 002 0 byte-code: table2
92\ v1 v2 003 0 byte-code: table3
93\ v1 v2 004 0 byte-code: table4
94\ v1 v2 005 0 byte-code: table5
95\ v1 v2 006 0 byte-code: table6
96\ v1 v2 007 0 byte-code: table7
97\ v1 v2 008 0 byte-code: table8
98\ v1 v2 009 0 byte-code: table9
99\ v1 v2 00a 0 byte-code: table10
100\ v1 v2 00b 0 byte-code: table11
101\ v1 v2 00c 0 byte-code: table12
102\ v1 v2 00d 0 byte-code: table13
103\ v1 v2 00e 0 byte-code: table14
104\ v1 v2 00f 0 byte-code: table15
105
106v1 v2 010 0 byte-code: b(lit) ( -- n )
107v1 v2 011 0 byte-code: b(') ( -- acf )
108v1 v2 012 0 byte-code: b(") ( -- adr len )
109v1 v2 013 0 byte-code: bbranch ( -- )
110v1 v2 014 0 byte-code: b?branch ( -- )
111v1 v2 015 0 byte-code: b(loop) ( -- )
112v1 v2 016 0 byte-code: b(+loop) ( n -- )
113v1 v2 017 0 byte-code: b(do) ( end start -- )
114v1 v2 018 0 byte-code: b(?do) ( end start -- )
115v1 v2 019 0 byte-code: i ( -- index )
116v1 v2 01a 0 byte-code: j ( -- outerindex )
117v1 v2 01b 0 byte-code: b(leave) ( -- )
118v1 v2 01c 0 byte-code: b(of) ( sel tstval - sel|none ) \ then offset.
119
120v1 v2 01d 0 byte-code: execute ( acf -- )
121
122v1 v2 01e 0 byte-code: + ( n1 n2 -- n3 )
123v1 v2 01f 0 byte-code: - ( n1 n2 -- n3)
124v1 v2 020 0 byte-code: * ( n1 n2 -- n3)
125v1 v2 021 0 byte-code: / ( n1 n2 -- n3)
126v1 v2 022 0 byte-code: mod ( n1 n2 -- n3)
127v1 v2 023 0 byte-code: and ( n1 n2 -- n3)
128v1 v2 024 0 byte-code: or ( n1 n2 -- n3)
129v1 v2 025 0 byte-code: xor ( n1 n2 -- n3)
130v1 v2 026 0 byte-code: invert ( n1 -- n2 ) \ Was not
131v1 v2 027 0 byte-code: lshift ( n1 cnt -- n2 ) \ Was <<
132v1 v2 028 0 byte-code: rshift ( n1 cnt -- n2 ) \ Was >>
133v1 v2 029 0 byte-code: >>a ( n1 cnt -- n2 )
134v1 v2 02a 0 byte-code: /mod ( n1 n2 -- rem quot )
135v1 v2 02b 0 byte-code: u/mod ( n1 n2 -- rem quot )
136v1 v2 02c 0 byte-code: negate ( n1 -- n2 )
137
138v1 v2 02d 0 byte-code: abs ( n1 -- n2 )
139v1 v2 02e 0 byte-code: min ( n1 n2 -- n3 )
140v1 v2 02f 0 byte-code: max ( n1 n2 -- n3 )
141
142v1 v2 030 0 byte-code: >r ( n -- ) ( rs: -- n )
143v1 v2 031 0 byte-code: r> ( -- n ) ( rs: n -- )
144v1 v2 032 0 byte-code: r@ ( -- n ) ( rs: -- )
145v1 v2 033 0 byte-code: exit ( -- )
146
147v1 v2 034 0 byte-code: 0= ( n -- flag )
148v1 v2 035 0 byte-code: 0<> ( n -- flag )
149v1 v2 036 0 byte-code: 0< ( n -- flag )
150v1 v2 037 0 byte-code: 0<= ( n -- flag )
151v1 v2 038 0 byte-code: 0> ( n -- flag )
152v1 v2 039 0 byte-code: 0>= ( n -- flag )
153v1 v2 03a 0 byte-code: < ( n1 n2 -- flag )
154v1 v2 03b 0 byte-code: > ( n1 n2 -- flag )
155v1 v2 03c 0 byte-code: = ( n1 n2 -- flag )
156v1 v2 03d 0 byte-code: <> ( n1 n2 -- flag )
157v1 v2 03e 0 byte-code: u> ( n1 n2 -- flag )
158v1 v2 03f 0 byte-code: u<= ( n1 n2 -- flag )
159v1 v2 040 0 byte-code: u< ( n1 n2 -- flag )
160v1 v2 041 0 byte-code: u>= ( n1 n2 -- flag )
161v1 v2 042 0 byte-code: >= ( n1 n2 -- flag )
162v1 v2 043 0 byte-code: <= ( n1 n2 -- flag )
163v1 v2 044 0 byte-code: between ( n min max -- flag )
164v1 v2 045 0 byte-code: within ( n min max -- flag )
165
166v1 v2 046 0 byte-code: drop ( n -- )
167v1 v2 047 0 byte-code: dup ( n -- n n )
168v1 v2 048 0 byte-code: over ( n1 n2 -- n1 n2 n1 )
169v1 v2 049 0 byte-code: swap ( n1 n2 -- n2 n1 )
170v1 v2 04a 0 byte-code: rot ( n1 n2 n3 -- n2 n3 n1 )
171v1 v2 04b 0 byte-code: -rot ( n1 n2 n3 -- n3 n1 n2 )
172v1 v2 04c 0 byte-code: tuck ( n1 n2 -- n2 n1 n2 )
173v1 v2 04d 0 byte-code: nip ( n1 n2 -- n2 )
174v1 v2 04e 0 byte-code: pick ( +n -- n2 )
175v1 v2 04f 0 byte-code: roll ( +n -- )
176v1 v2 050 0 byte-code: ?dup ( n -- n | n n )
177v1 v2 051 0 byte-code: depth ( -- +n )
178
179v1 v2 052 0 byte-code: 2drop ( n1 n2 -- )
180v1 v2 053 0 byte-code: 2dup ( n1 n2 -- n1 n2 n1 n2 )
181v1 v2 054 0 byte-code: 2over ( n1 n2 n3 n4 -- n1 n2 n3 n4 n1 n2 )
182v1 v2 055 0 byte-code: 2swap ( n1 n2 n3 n4 -- n3 n4 n1 n2 )
183v1 v2 056 0 byte-code: 2rot ( n1 n2 n3 n4 n5 n6 -- n3 n4 n5 n6 n1 n2 )
184
185v1 v2 057 0 byte-code: 2/ ( n1 -- n2 )
186v1 v2 058 0 byte-code: u2/ ( n1 -- n2 )
187v1 v2 059 0 byte-code: 2* ( n1 -- n2 )
188
189v1 v2 05a 0 byte-code: /c ( -- n )
190v1 v2 05b 0 byte-code: /w ( -- n )
191v1 v2 05c 0 byte-code: /l ( -- n )
192v1 v2 05d 0 byte-code: /n ( -- n )
193v1 v2 05e 0 byte-code: ca+ ( n1 index -- n2 )
194v1 v2 05f 0 byte-code: wa+ ( n1 index -- n2 )
195v1 v2 060 0 byte-code: la+ ( n1 index -- n2 )
196v1 v2 061 0 byte-code: na+ ( n1 index -- n2 )
197v1 v2 062 0 byte-code: char+ ( n1 -- n2 ) \ Was ca1+
198v1 v2 063 0 byte-code: wa1+ ( n1 -- n2 )
199v1 v2 064 0 byte-code: la1+ ( n1 -- n2 )
200v1 v2 065 0 byte-code: cell+ ( n1 -- n2 ) \ Was na1+
201v1 v2 066 0 byte-code: chars ( n1 -- n2 ) \ Was /c*
202v1 v2 067 0 byte-code: /w* ( n1 -- n2 )
203v1 v2 068 0 byte-code: /l* ( n1 -- n2 )
204v1 v2 069 0 byte-code: cells ( n1 -- n2 ) \ Was /n*
205
206v1 v2 06a 0 byte-code: on ( adr -- )
207v1 v2 06b 0 byte-code: off ( adr -- )
208v1 v2 06c 0 byte-code: +! ( n adr -- )
209v1 v2 06d 0 byte-code: @ ( adr -- n )
210v1 v2 06e 0 byte-code: l@ ( adr -- L )
211v1 v2 06f 0 byte-code: w@ ( adr -- w )
212v1 v2 070 0 byte-code: <w@ ( adr -- w )
213v1 v2 071 0 byte-code: c@ ( adr -- b )
214v1 v2 072 0 byte-code: ! ( n adr -- )
215v1 v2 073 0 byte-code: l! ( n adr -- )
216v1 v2 074 0 byte-code: w! ( n adr -- )
217v1 v2 075 0 byte-code: c! ( n adr -- )
218v1 v2 076 0 byte-code: 2@ ( adr -- n1 n2 )
219v1 v2 077 0 byte-code: 2! ( n1 n2 adr -- )
220
221v1 v2 078 0 byte-code: move ( adr1 adr2 cnt -- )
222v1 v2 079 0 byte-code: fill ( adr cnt byte -- )
223v1 v2 07a 0 byte-code: comp ( adr1 adr2 cnt -- n )
224v1 v2 07b 0 byte-code: noop ( -- )
225
226v1 v2 07c 0 byte-code: lwsplit ( L -- w.lo w.hi )
227v1 v2 07d 0 byte-code: wljoin ( w.lo w.hi -- L )
228v1 v2 07e 0 byte-code: lbsplit ( L -- b.lo b b b.hi )
229v1 v2 07f 0 byte-code: bljoin ( b.lo b b b.hi -- L )
230v1 v2 080 0 byte-code: wbflip ( w1 -- w2 ) \ Was flip
231
232v1 v2 081 0 byte-code: upc ( char -- upper-case-char )
233v1 v2 082 0 byte-code: lcc ( char -- lower-case-char )
234v1 v2 083 0 byte-code: pack ( adr len pstr -- pstr )
235v1 v2 084 0 byte-code: count ( pstr -- adr len )
236
237v1 v2 085 0 byte-code: body> ( apf -- acf )
238v1 v2 086 0 byte-code: >body ( acf -- apf )
239
240v1 v2 087 0 byte-code: fcode-revision ( -- n ) \ Was version
241
242v1 v2 088 0 byte-code: span ( -- adr )
243
244v3 089 0 byte-code: unloop ( -- )
245
246v1 v2 08a 0 byte-code: expect ( adr +n -- )
247
248v1 v2 08b 0 byte-code: alloc-mem ( cnt -- adr )
249v1 v2 08c 0 byte-code: free-mem ( adr cnt -- )
250
251v1 v2 08d 0 byte-code: key? ( -- flag )
252v1 v2 08e 0 byte-code: key ( -- char )
253v1 v2 08f 0 byte-code: emit ( char -- )
254v1 v2 090 0 byte-code: type ( adr +n -- )
255
256v1 v2 091 0 byte-code: (cr ( -- )
257v1 v2 092 0 byte-code: cr ( -- )
258v1 v2 093 0 byte-code: #out ( -- adr )
259v1 v2 094 0 byte-code: #line ( -- adr )
260
261v1 v2 095 0 byte-code: hold ( char -- )
262v1 v2 096 0 byte-code: <# ( -- )
263v1 v2 097 0 byte-code: u#> ( L -- adr +n ) \ Was #>
264v1 v2 098 0 byte-code: sign ( n -- )
265v1 v2 099 0 byte-code: u# ( +L1 -- +L2 ) \ Was #
266v1 v2 09a 0 byte-code: u#s ( +L -- 0 ) \ Was #s
267v1 v2 09b 0 byte-code: u. ( u -- )
268v1 v2 09c 0 byte-code: u.r ( u cnt -- )
269v1 v2 09d 0 byte-code: . ( n -- )
270v1 v2 09e 0 byte-code: .r ( n cnt -- )
271v1 v2 09f 0 byte-code: .s ( -- )
272v1 v2 0a0 0 byte-code: base ( -- adr )
273
274\ v1 0a1 0 byte-code: convert \ -- removed for brevity
275
276 v2 0a2 0 byte-code: $number ( adr len -- n false | true )
277
278v1 v2 0a3 0 byte-code: digit ( char base -- digit true | char false )
279
280v1 v2 0a4 0 byte-code: -1 ( -- -1 )
281v1 v2 0a5 0 byte-code: 0 ( -- 0 )
282v1 v2 0a6 0 byte-code: 1 ( -- 1 )
283v1 v2 0a7 0 byte-code: 2 ( -- 2 )
284v1 v2 0a8 0 byte-code: 3 ( -- 3 )
285v1 v2 0a9 0 byte-code: bl ( -- n )
286v1 v2 0aa 0 byte-code: bs ( -- n )
287v1 v2 0ab 0 byte-code: bell ( -- n )
288
289v1 v2 0ac 0 byte-code: bounds ( n cnt -- n+cnt n )
290v1 v2 0ad 0 byte-code: here ( -- adr )
291v1 v2 0ae 0 byte-code: aligned ( adr1 -- adr2 )
292
293v1 v2 0af 0 byte-code: wbsplit ( w -- b.lo b.hi )
294v1 v2 0b0 0 byte-code: bwjoin ( b.lo b.hi -- w )
295
296v1 v2 0b1 0 byte-code: b(<mark)
297v1 v2 0b2 0 byte-code: b(>resolve)
298
299\ v1 0b3 0 byte-code: set-token ( offset token# table# -- )
300\ v1 0b4 0 byte-code: set-table ( offset #entries table# -- )
301
302v1 v2 0b5 0 byte-code: new-token \ then table#, code#, token-type
303v1 v2 0b6 0 byte-code: named-token \ then string, table#, code#, token-type
304
305v1 v2 0b7 0 byte-code: b(:) ( -- )
306v1 v2 0b8 0 byte-code: b(value) ( -- )
307v1 v2 0b9 0 byte-code: b(variable) ( -- )
308v1 v2 0ba 0 byte-code: b(constant) ( -- )
309v1 v2 0bb 0 byte-code: b(create) ( -- )
310v1 v2 0bc 0 byte-code: b(defer) ( -- )
311v1 v2 0bd 0 byte-code: b(buffer:) ( -- )
312v1 v2 0be 0 byte-code: b(field) ( -- )
313\ v2 0bf 0 byte-code: b(code) ( -- ) \ version 2 token
314
315v2.1 0c0 0 byte-code: instance ( -- ) \ 2.1
316
317\ 0c1 0
318
319v1 v2 0c2 0 byte-code: b(;) ( -- )
320
321v1 v2 0c3 0 byte-code: b(to) ( acf -- ) \ Was b(is)
322v1 v2 0c4 0 byte-code: b(case) ( selector -- selector )
323v1 v2 0c5 0 byte-code: b(endcase) ( selector -- )
324v1 v2 0c6 0 byte-code: b(endof) ( -- )
325
326v3 0c7 0 byte-code: # ( ud1 -- ud2 )
327v3 0c8 0 byte-code: #s ( ud1 -- 0 0 )
328v3 0c9 0 byte-code: #> ( ud -- adr len )
329
330 v2 0ca 0 byte-code: external-token ( -- )
331
332v1 v2 0cb 0 byte-code: $find ( adr len -- adr len false | acf +-1 )
333v1 v2 0cc 0 byte-code: offset16 \ Sets the offset length to 16 bits
334
335 v2 0cd 0 byte-code: evaluate ( adr len -- ) \ Was eval
336
337\ 0ce 0
338\ 0cf 0
339
340v1 v2 0d0 0 byte-code: c, ( n -- )
341v1 v2 0d1 0 byte-code: w, ( n -- )
342v1 v2 0d2 0 byte-code: l, ( n -- )
343v1 v2 0d3 0 byte-code: , ( n -- )
344
345 v2 0d4 0 byte-code: um* ( u1 u2 -- ud ) \ Was u*x
346 v2 0d5 0 byte-code: um/mod ( ud1 u2 -- u.rem u.quot ) \ Was xu/mod
347\ 0d6 0
348\ 0d7 0
349
350 v2 0d8 0 byte-code: d+ ( d1 d2 -- d3 ) \ Was x+
351 v2 0d9 0 byte-code: d- ( d1 d2 -- d3 ) \ Was x-
352
353v3 0da 0 byte-code: get-token ( fcode# -- xt immediate? )
354v3 0db 0 byte-code: set-token ( xt immediate? fcode# -- )
355v3 0dc 0 byte-code: state ( -- adr )
356v3 0dd 0 byte-code: compile, ( xt -- )
357v3 0de 0 byte-code: behavior ( xt1 -- xt2 )
358\ 0df 0
359
360 v2 0f0 0 byte-code: start0 ( -- ) \ version 2 token
361 v2 0f1 0 byte-code: start1 ( -- ) \ version 2 token
362 v2 0f2 0 byte-code: start2 ( -- ) \ version 2 token
363 v2 0f3 0 byte-code: start4 ( -- ) \ version 2 token
364
365\ 0f4 0
366\ 0f5 0
367\ 0f6 0
368\ 0f7 0
369\ 0f8 0
370\ 0f9 0
371\ 0fa 0
372\ 0fb 0
373v2.3 0fc 0 byte-code: ferror
374
375v1 v2 0fd 0 byte-code: version1 \ then 0byte,chksum(2bytes),length(4bytes)
376\ v1 0fe 0 byte-code: 4-byte-id \ then 3 more bytes
377
378v1 v2 0ff 0 byte-code: end1