ChangeLog:
[deliverable/binutils-gdb.git] / cpu / m32c.cpu
CommitLineData
49f58d10
JB
1; Renesas M32C CPU description. -*- Scheme -*-
2; Copyright (C) 2005 Red Hat, Inc.
3; This file is part of CGEN.
4; See file COPYING.CGEN for details.
5
6(include "simplify.inc")
7
8(define-arch
9 (name m32c)
10 (comment "Renesas M32C")
11 (default-alignment forced)
12 (insn-lsb0? #f)
13 (machs m16c m32c)
14 (isas m16c m32c)
15)
16
17(define-isa
18 (name m16c)
19
20 (default-insn-bitsize 32)
21
22 ; Number of bytes of insn we can initially fetch.
23 (base-insn-bitsize 32)
24
25 ; Used in computing bit numbers.
26 (default-insn-word-bitsize 32)
27
28 (decode-assist (0 1 2 3 4 5 6 7)) ; Initial bitnumbers to decode insns by.
29
30 ; fetches 1 insn at a time.
31 (liw-insns 1)
32
33 ; executes 1 insn at a time.
34 (parallel-insns 1)
35 )
36
37(define-isa
38 (name m32c)
39
40 (default-insn-bitsize 32)
41
42 ; Number of bytes of insn we can initially fetch.
43 (base-insn-bitsize 32)
44
45 ; Used in computing bit numbers.
46 (default-insn-word-bitsize 32)
47
48 (decode-assist (0 1 2 3 4 5 6 7)) ; Initial bitnumbers to decode insns by.
49
50 ; fetches 1 insn at a time.
51 (liw-insns 1)
52
53 ; executes 1 insn at a time.
54 (parallel-insns 1)
55 )
56
57(define-cpu
58 ; cpu names must be distinct from the architecture name and machine names.
59 ; The "b" suffix stands for "base" and is the convention.
60 ; The "f" suffix stands for "family" and is the convention.
61 (name m16cbf)
62 (comment "Renesas M16C base family")
63 (insn-endian big)
64 (data-endian little)
65 (word-bitsize 16)
66)
67
68(define-cpu
69 ; cpu names must be distinct from the architecture name and machine names.
70 ; The "b" suffix stands for "base" and is the convention.
71 ; The "f" suffix stands for "family" and is the convention.
72 (name m32cbf)
73 (comment "Renesas M32C base family")
74 (insn-endian big)
75 (data-endian little)
76 (word-bitsize 16)
77)
78
79(define-mach
80 (name m16c)
81 (comment "Generic M16C cpu")
82 (cpu m32cbf)
83)
84
85(define-mach
86 (name m32c)
87 (comment "Generic M32C cpu")
88 (cpu m32cbf)
89)
90
91; Model descriptions.
92
93(define-model
94 (name m16c)
95 (comment "m16c") (attrs)
96 (mach m16c)
97
98 ; `state' is a list of variables for recording model state
99 ; (state)
100 (unit u-exec "Execution Unit" ()
101 1 1 ; issue done
102 () ; state
103 () ; inputs
104 () ; outputs
105 () ; profile action (default)
106 )
107)
108
109(define-model
110 (name m32c)
111 (comment "m32c") (attrs)
112 (mach m32c)
113
114 ; `state' is a list of variables for recording model state
115 ; (state)
116 (unit u-exec "Execution Unit" ()
117 1 1 ; issue done
118 () ; state
119 () ; inputs
120 () ; outputs
121 () ; profile action (default)
122 )
123)
124
125; Macros to simplify MACH attribute specification.
126
127(define-pmacro all-isas () (ISA m16c,m32c))
128(define-pmacro m16c-isa () (ISA m16c))
129(define-pmacro m32c-isa () (ISA m32c))
130
131(define-pmacro MACH16 (MACH m16c))
132(define-pmacro MACH32 (MACH m32c))
133
134(define-pmacro (machine size)
135 (MACH (.sym m size c)) (ISA (.sym m size c)))
136\f
137;=============================================================
138; Fields
139;-------------------------------------------------------------
140; Main opcodes
141;
142(dnf f-0-1 "opcode" (all-isas) 0 1)
143(dnf f-0-2 "opcode" (all-isas) 0 2)
144(dnf f-0-3 "opcode" (all-isas) 0 3)
145(dnf f-0-4 "opcode" (all-isas) 0 4)
146(dnf f-1-3 "opcode" (all-isas) 1 3)
147(dnf f-2-2 "opcode" (all-isas) 2 2)
148(dnf f-3-4 "opcode" (all-isas) 3 4)
149(dnf f-3-1 "opcode" (all-isas) 3 1)
150(dnf f-4-1 "opcode" (all-isas) 4 1)
151(dnf f-4-3 "opcode" (all-isas) 4 3)
152(dnf f-4-4 "opcode" (all-isas) 4 4)
153(dnf f-4-6 "opcode" (all-isas) 4 6)
154(dnf f-5-1 "opcode" (all-isas) 5 1)
155(dnf f-5-3 "opcode" (all-isas) 5 3)
156(dnf f-6-2 "opcode" (all-isas) 6 2)
157(dnf f-7-1 "opcode" (all-isas) 7 1)
158(dnf f-8-1 "opcode" (all-isas) 8 1)
159(dnf f-8-2 "opcode" (all-isas) 8 2)
160(dnf f-8-3 "opcode" (all-isas) 8 3)
161(dnf f-8-4 "opcode" (all-isas) 8 4)
162(dnf f-8-8 "opcode" (all-isas) 8 8)
163(dnf f-9-3 "opcode" (all-isas) 9 3)
164(dnf f-9-1 "opcode" (all-isas) 9 1)
165(dnf f-10-1 "opcode" (all-isas) 10 1)
166(dnf f-10-2 "opcode" (all-isas) 10 2)
167(dnf f-10-3 "opcode" (all-isas) 10 3)
168(dnf f-11-1 "opcode" (all-isas) 11 1)
169(dnf f-12-1 "opcode" (all-isas) 12 1)
170(dnf f-12-2 "opcode" (all-isas) 12 2)
171(dnf f-12-3 "opcode" (all-isas) 12 3)
172(dnf f-12-4 "opcode" (all-isas) 12 4)
173(dnf f-12-6 "opcode" (all-isas) 12 6)
174(dnf f-13-3 "opcode" (all-isas) 13 3)
175(dnf f-14-1 "opcode" (all-isas) 14 1)
176(dnf f-14-2 "opcode" (all-isas) 14 2)
177(dnf f-15-1 "opcode" (all-isas) 15 1)
178(dnf f-16-1 "opcode" (all-isas) 16 1)
179(dnf f-16-2 "opcode" (all-isas) 16 2)
180(dnf f-16-4 "opcode" (all-isas) 16 4)
181(dnf f-18-1 "opcode" (all-isas) 18 1)
182(dnf f-18-2 "opcode" (all-isas) 18 2)
183(dnf f-18-3 "opcode" (all-isas) 18 3)
184(dnf f-20-1 "opcode" (all-isas) 20 1)
185(dnf f-20-3 "opcode" (all-isas) 20 3)
186(dnf f-20-2 "opcode" (all-isas) 20 2)
187(dnf f-20-4 "opcode" (all-isas) 20 4)
188(dnf f-21-3 "opcode" (all-isas) 21 3)
189(dnf f-24-2 "opcode" (all-isas) 24 2)
190
191;-------------------------------------------------------------
192; Registers
193;-------------------------------------------------------------
194
195(dnf f-src16-rn "source Rn for m16c" (MACH16 m16c-isa) 10 2)
196(dnf f-src16-an "source An for m16c" (MACH16 m16c-isa) 11 1)
197
198(dnf f-src32-an-unprefixed "destination An for m32c" (MACH32 m32c-isa) 11 1)
199(dnf f-src32-an-prefixed "destination An for m32c" (MACH32 m32c-isa) 19 1)
200
201; QI mode gr encoding for m32c is different than for m16c. The hardware
202; is indexed using the m16c encoding, so perform the transformation here.
203; register m16c m32c
204; ----------------------
205; r0l 00'b 10'b
206; r0h 01'b 00'b
207; r1l 10'b 11'b
208; r1h 11'b 01'b
209(df f-src32-rn-unprefixed-QI "source Rn QI for m32c" (MACH32 m32c-isa) 10 2 UINT
210 ((value pc) (or USI (and (sll (inv value) 1) 2) (and (srl value 1) 1))) ; insert
211 ((value pc) (or USI (and (inv (srl value 1)) 1) (and (sll value 1) 2))) ; extract
212)
213; QI mode gr encoding for m32c is different than for m16c. The hardware
214; is indexed using the m16c encoding, so perform the transformation here.
215; register m16c m32c
216; ----------------------
217; r0l 00'b 10'b
218; r0h 01'b 00'b
219; r1l 10'b 11'b
220; r1h 11'b 01'b
221(df f-src32-rn-prefixed-QI "source Rn QI for m32c" (MACH32 m32c-isa) 18 2 UINT
222 ((value pc) (or USI (and (sll (inv value) 1) 2) (and (srl value 1) 1))) ; insert
223 ((value pc) (or USI (and (inv (srl value 1)) 1) (and (sll value 1) 2))) ; extract
224)
225; HI mode gr encoding for m32c is different than for m16c. The hardware
226; is indexed using the m16c encoding, so perform the transformation here.
227; register m16c m32c
228; ----------------------
229; r0 00'b 10'b
230; r1 01'b 11'b
231; r2 10'b 00'b
232; r3 11'b 01'b
233(df f-src32-rn-unprefixed-HI "source Rn HI for m32c" (MACH32 m32c-isa) 10 2 UINT
234 ((value pc) (mod USI (add value 2) 4)) ; insert
235 ((value pc) (mod USI (add value 2) 4)) ; extract
236)
237
238; HI mode gr encoding for m32c is different than for m16c. The hardware
239; is indexed using the m16c encoding, so perform the transformation here.
240; register m16c m32c
241; ----------------------
242; r0 00'b 10'b
243; r1 01'b 11'b
244; r2 10'b 00'b
245; r3 11'b 01'b
246(df f-src32-rn-prefixed-HI "source Rn HI for m32c" (MACH32 m32c-isa) 18 2 UINT
247 ((value pc) (mod USI (add value 2) 4)) ; insert
248 ((value pc) (mod USI (add value 2) 4)) ; extract
249)
250
251; SI mode gr encoding for m32c is as follows:
252; register encoding index
253; -------------------------
254; r2r0 10'b 0
255; r3r1 11'b 1
256(df f-src32-rn-unprefixed-SI "source Rn SI for m32c" (MACH32 m32c-isa) 10 2 UINT
257 ((value pc) (add USI value 2)) ; insert
258 ((value pc) (sub USI value 2)) ; extract
259)
260(df f-src32-rn-prefixed-SI "source Rn SI for m32c" (MACH32 m32c-isa) 18 2 UINT
261 ((value pc) (add USI value 2)) ; insert
262 ((value pc) (sub USI value 2)) ; extract
263)
264
265(dnf f-dst32-rn-ext-unprefixed "destination Rn for m32c" (MACH32 m32c-isa) 9 1)
266
267(dnf f-dst16-rn "destination Rn for m16c" (MACH16 m16c-isa) 14 2)
268(dnf f-dst16-rn-ext "destination Rn for m16c" (MACH16 m16c-isa) 14 1)
269(dnf f-dst16-rn-QI-s "destination Rn for m16c" (MACH16 m16c-isa) 5 1)
270
271(dnf f-dst16-an "destination An for m16c" (MACH16 m16c-isa) 15 1)
272(dnf f-dst16-an-s "destination An for m16c" (MACH16 m16c-isa) 4 1)
273
274(dnf f-dst32-an-unprefixed "destination An for m32c" (MACH32 m32c-isa) 9 1)
275(dnf f-dst32-an-prefixed "destination An for m32c" (MACH32 m32c-isa) 17 1)
276
277; QI mode gr encoding for m32c is different than for m16c. The hardware
278; is indexed using the m16c encoding, so perform the transformation here.
279; register m16c m32c
280; ----------------------
281; r0l 00'b 10'b
282; r0h 01'b 00'b
283; r1l 10'b 11'b
284; r1h 11'b 01'b
285(df f-dst32-rn-unprefixed-QI "destination Rn QI for m32c" (MACH32 m32c-isa) 8 2 UINT
286 ((value pc) (or USI (and (sll (inv value) 1) 2) (and (srl value 1) 1))) ; insert
287 ((value pc) (or USI (and (inv (srl value 1)) 1) (and (sll value 1) 2))) ; extract
288)
289(df f-dst32-rn-prefixed-QI "destination Rn QI for m32c" (MACH32 m32c-isa) 16 2 UINT
290 ((value pc) (or USI (and (sll (inv value) 1) 2) (and (srl value 1) 1))) ; insert
291 ((value pc) (or USI (and (inv (srl value 1)) 1) (and (sll value 1) 2))) ; extract
292)
293; HI mode gr encoding for m32c is different than for m16c. The hardware
294; is indexed using the m16c encoding, so perform the transformation here.
295; register m16c m32c
296; ----------------------
297; r0 00'b 10'b
298; r1 01'b 11'b
299; r2 10'b 00'b
300; r3 11'b 01'b
301(df f-dst32-rn-unprefixed-HI "destination Rn HI for m32c" (MACH32 m32c-isa) 8 2 UINT
302 ((value pc) (mod USI (add value 2) 4)) ; insert
303 ((value pc) (mod USI (add value 2) 4)) ; extract
304)
305(df f-dst32-rn-prefixed-HI "destination Rn HI for m32c" (MACH32 m32c-isa) 16 2 UINT
306 ((value pc) (mod USI (add value 2) 4)) ; insert
307 ((value pc) (mod USI (add value 2) 4)) ; extract
308)
309; SI mode gr encoding for m32c is as follows:
310; register encoding index
311; -------------------------
312; r2r0 10'b 0
313; r3r1 11'b 1
314(df f-dst32-rn-unprefixed-SI "destination Rn SI for m32c" (MACH32 m32c-isa) 8 2 UINT
315 ((value pc) (add USI value 2)) ; insert
316 ((value pc) (sub USI value 2)) ; extract
317)
318(df f-dst32-rn-prefixed-SI "destination Rn SI for m32c" (MACH32 m32c-isa) 16 2 UINT
319 ((value pc) (add USI value 2)) ; insert
320 ((value pc) (sub USI value 2)) ; extract
321)
322
323(dnf f-dst16-1-S "destination R0[hl] for m16c" (MACH16 m16c-isa) 5 1)
324
325;-------------------------------------------------------------
326; Immediates embedded in the base insn
327;-------------------------------------------------------------
328
329(df f-imm-8-s4 "4 bit signed" (all-isas) 8 4 INT #f #f)
330(df f-imm-12-s4 "4 bit signed" (all-isas) 12 4 INT #f #f)
331(df f-imm-13-u3 "3 bit unsigned" (all-isas) 13 3 UINT #f #f)
332(df f-imm-20-s4 "4 bit signed" (all-isas) 20 4 INT #f #f)
333
334(df f-imm1-S "1 bit immediate for short format binary insns" (MACH32 m32c-isa) 2 1 UINT
335 ((value pc) (sub USI value 1)) ; insert
336 ((value pc) (add USI value 1)) ; extract
337)
338
339(dnmf f-imm3-S "3 bit unsigned for short format insns" (all-isas) UINT
340 (f-2-2 f-7-1)
341 (sequence () ; insert
342 (set (ifield f-7-1) (and (sub (ifield f-imm3-S) 1) 1))
343 (set (ifield f-2-2) (and (srl (sub (ifield f-imm3-S) 1) 1) #x3))
344 )
345 (sequence () ; extract
346 (set (ifield f-imm3-S) (add (or (sll (ifield f-2-2) 1)
347 (ifield f-7-1))
348 1))
349 )
350)
351
352;-------------------------------------------------------------
353; Immediates and displacements beyond the base insn
354;-------------------------------------------------------------
355
356(df f-dsp-8-u6 "6 bit unsigned" (all-isas) 8 6 UINT #f #f)
357(df f-dsp-8-u8 "8 bit unsigned" (all-isas) 8 8 UINT #f #f)
358(df f-dsp-8-s8 "8 bit signed" (all-isas) 8 8 INT #f #f)
359(df f-dsp-10-u6 "6 bit unsigned" (all-isas) 10 6 UINT #f #f)
360(df f-dsp-16-u8 "8 bit unsigned" (all-isas) 16 8 UINT #f #f)
361(df f-dsp-16-s8 "8 bit signed" (all-isas) 16 8 INT #f #f)
362(df f-dsp-24-u8 "8 bit unsigned" (all-isas) 24 8 UINT #f #f)
363(df f-dsp-24-s8 "8 bit signed" (all-isas) 24 8 INT #f #f)
364(df f-dsp-32-u8 "8 bit unsigned" (all-isas) 32 8 UINT #f #f)
365(df f-dsp-32-s8 "8 bit signed" (all-isas) 32 8 INT #f #f)
366(df f-dsp-40-u8 "8 bit unsigned" (all-isas) 40 8 UINT #f #f)
367(df f-dsp-40-s8 "8 bit signed" (all-isas) 40 8 INT #f #f)
368(df f-dsp-48-u8 "8 bit unsigned" (all-isas) 48 8 UINT #f #f)
369(df f-dsp-48-s8 "8 bit signed" (all-isas) 48 8 INT #f #f)
370(df f-dsp-56-u8 "8 bit unsigned" (all-isas) 56 8 UINT #f #f)
371(df f-dsp-56-s8 "8 bit signed" (all-isas) 56 8 INT #f #f)
372(df f-dsp-64-u8 "8 bit unsigned" (all-isas) 64 8 UINT #f #f)
373(df f-dsp-64-s8 "8 bit signed" (all-isas) 64 8 INT #f #f)
374
375; Insn opcode endianness is big, but the immediate fields are stored
376; in little endian. Handle this here at the field level for all immediate
377; fields longer that 1 byte.
378;
379; CGEN can't handle a field which spans a 32 bit word boundary, so
380; handle those as multi ifields.
381;
382; Take care in expressions using 'srl' or 'sll' as part of some larger
383; expression meant to yield sign-extended values. CGEN translates
384; uses of those operators into C expressions whose type is 'unsigned
385; int', which tends to make the whole expression 'unsigned int'.
386; Expressions like (set (ifield foo) X), however, just take X and
387; store it in some member of 'struct cgen_fields', all of whose
388; members are 'long'. On machines where 'long' is larger than
389; 'unsigned int', assigning a "sign-extended" unsigned int to a long
390; just produces a very large positive value. insert_normal will
391; range-check the field's value and produce odd error messages like
392; this:
393;
394; Error: operand out of range (4160684031 not between -2147483648 and 2147483647) `add.l #-265,-270[fb]'
395;
396; Annoyingly, the code will work fine on machines where 'long' and
397; 'unsigned int' are the same size: the assignment will produce a
398; negative number.
399;
400; Just tell yourself over and over: overflow detection is expensive,
401; and you're glad C doesn't do it, because it never happens in real
402; life.
403
404(df f-dsp-8-u16 "16 bit unsigned" (all-isas) 8 16 UINT
405 ((value pc) (or UHI
406 (and (srl value 8) #x00ff)
407 (and (sll value 8) #xff00))) ; insert
408 ((value pc) (or UHI
409 (and UHI (srl UHI value 8) #x00ff)
410 (and UHI (sll UHI value 8) #xff00))) ; extract
411)
412
413(df f-dsp-8-s16 "8 bit signed" (all-isas) 8 16 INT
414 ((value pc) (ext INT
415 (trunc HI
416 (or (and (srl value 8) #x00ff)
417 (and (sll value 8) #xff00))))) ; insert
418 ((value pc) (ext INT
419 (trunc HI
420 (or (and (srl value 8) #x00ff)
421 (and (sll value 8) #xff00))))) ; extract
422)
423
424(df f-dsp-16-u16 "16 bit unsigned" (all-isas) 16 16 UINT
425 ((value pc) (or UHI
426 (and (srl value 8) #x00ff)
427 (and (sll value 8) #xff00))) ; insert
428 ((value pc) (or UHI
429 (and UHI (srl UHI value 8) #x00ff)
430 (and UHI (sll UHI value 8) #xff00))) ; extract
431)
432
433(df f-dsp-16-s16 "16 bit signed" (all-isas) 16 16 INT
434 ((value pc) (ext INT
435 (trunc HI
436 (or (and (srl value 8) #x00ff)
437 (and (sll value 8) #xff00))))) ; insert
438 ((value pc) (ext INT
439 (trunc HI
440 (or (and (srl value 8) #x00ff)
441 (and (sll value 8) #xff00))))) ; extract
442)
443
444(dnmf f-dsp-24-u16 "16 bit unsigned" (all-isas) UINT
445 (f-dsp-24-u8 f-dsp-32-u8)
446 (sequence () ; insert
447 (set (ifield f-dsp-24-u8) (and (ifield f-dsp-24-u16) #xff))
448 (set (ifield f-dsp-32-u8) (and (srl (ifield f-dsp-24-u16) 8) #xff))
449 )
450 (sequence () ; extract
451 (set (ifield f-dsp-24-u16) (or (sll (ifield f-dsp-32-u8) 8)
452 (ifield f-dsp-24-u8)))
453 )
454)
455
456(dnmf f-dsp-24-s16 "16 bit signed" (all-isas) INT
457 (f-dsp-24-u8 f-dsp-32-u8)
458 (sequence () ; insert
459 (set (ifield f-dsp-24-u8)
460 (and (ifield f-dsp-24-s16) #xff))
461 (set (ifield f-dsp-32-u8)
462 (and (srl (ifield f-dsp-24-s16) 8) #xff))
463 )
464 (sequence () ; extract
465 (set (ifield f-dsp-24-s16)
466 (ext INT
467 (trunc HI (or (sll (ifield f-dsp-32-u8) 8)
468 (ifield f-dsp-24-u8)))))
469 )
470)
471
472(df f-dsp-32-u16 "16 bit unsigned" (all-isas) 32 16 UINT
473 ((value pc) (or UHI
474 (and (srl value 8) #x00ff)
475 (and (sll value 8) #xff00))) ; insert
476 ((value pc) (or UHI
477 (and UHI (srl UHI value 8) #x00ff)
478 (and UHI (sll UHI value 8) #xff00))) ; extract
479)
480
481(df f-dsp-32-s16 "16 bit signed" (all-isas) 32 16 INT
482 ((value pc) (ext INT
483 (trunc HI
484 (or (and (srl value 8) #x00ff)
485 (and (sll value 8) #xff00))))) ; insert
486 ((value pc) (ext INT
487 (trunc HI
488 (or (and (srl value 8) #x00ff)
489 (and (sll value 8) #xff00))))) ; extract
490)
491
492(df f-dsp-40-u16 "16 bit unsigned" (all-isas) 40 16 UINT
493 ((value pc) (or UHI
494 (and (srl value 8) #x00ff)
495 (and (sll value 8) #xff00))) ; insert
496 ((value pc) (or UHI
497 (and UHI (srl UHI value 8) #x00ff)
498 (and UHI (sll UHI value 8) #xff00))) ; extract
499)
500
501(df f-dsp-40-s16 "16 bit signed" (all-isas) 40 16 INT
502 ((value pc) (ext INT
503 (trunc HI
504 (or (and (srl value 8) #x00ff)
505 (and (sll value 8) #xff00))))) ; insert
506 ((value pc) (ext INT
507 (trunc HI
508 (or (and (srl value 8) #x00ff)
509 (and (sll value 8) #xff00))))) ; extract
510)
511
512(df f-dsp-48-u16 "16 bit unsigned" (all-isas) 48 16 UINT
513 ((value pc) (or UHI
514 (and (srl value 8) #x00ff)
515 (and (sll value 8) #xff00))) ; insert
516 ((value pc) (or UHI
517 (and UHI (srl UHI value 8) #x00ff)
518 (and UHI (sll UHI value 8) #xff00))) ; extract
519)
520
521(df f-dsp-48-s16 "16 bit signed" (all-isas) 48 16 INT
522 ((value pc) (ext INT
523 (trunc HI
524 (or (and (srl value 8) #x00ff)
525 (and (sll value 8) #xff00))))) ; insert
526 ((value pc) (ext INT
527 (trunc HI
528 (or (and (srl value 8) #x00ff)
529 (and (sll value 8) #xff00))))) ; extract
530)
531
532(df f-dsp-64-u16 "16 bit unsigned" (all-isas) 64 16 UINT
533 ((value pc) (or UHI
534 (and (srl value 8) #x00ff)
535 (and (sll value 8) #xff00))) ; insert
536 ((value pc) (or UHI
537 (and UHI (srl UHI value 8) #x00ff)
538 (and UHI (sll UHI value 8) #xff00))) ; extract
539)
540
541(dnmf f-dsp-16-u24 "24 bit unsigned" (all-isas) UINT
542 (f-dsp-16-u16 f-dsp-32-u8)
543 (sequence () ; insert
544 (set (ifield f-dsp-16-u16) (and (ifield f-dsp-16-u24) #xffff))
545 (set (ifield f-dsp-32-u8) (and (srl (ifield f-dsp-16-u24) 16) #xff))
546 )
547 (sequence () ; extract
548 (set (ifield f-dsp-16-u24) (or (sll (ifield f-dsp-32-u8) 16)
549 (ifield f-dsp-16-u16)))
550 )
551)
552
553(dnmf f-dsp-24-u24 "24 bit unsigned" (all-isas) UINT
554 (f-dsp-24-u8 f-dsp-32-u16)
555 (sequence () ; insert
556 (set (ifield f-dsp-24-u8) (and (ifield f-dsp-24-u24) #xff))
557 (set (ifield f-dsp-32-u16) (and (srl (ifield f-dsp-24-u24) 8) #xffff))
558 )
559 (sequence () ; extract
560 (set (ifield f-dsp-24-u24) (or (sll (ifield f-dsp-32-u16) 8)
561 (ifield f-dsp-24-u8)))
562 )
563)
564
565(df f-dsp-32-u24 "24 bit unsigned" (all-isas) 32 24 UINT
566 ((value pc) (or USI
567 (or USI
568 (and (srl value 16) #x0000ff)
569 (and value #x00ff00))
570 (and (sll value 16) #xff0000))) ; insert
571 ((value pc) (or USI
572 (or USI
573 (and USI (srl UHI value 16) #x0000ff)
574 (and USI value #x00ff00))
575 (and USI (sll UHI value 16) #xff0000))) ; extract
576)
577
578(df f-dsp-40-u24 "24 bit unsigned" (all-isas) 40 24 UINT
579 ((value pc) (or USI
580 (or USI
581 (and (srl value 16) #x0000ff)
582 (and value #x00ff00))
583 (and (sll value 16) #xff0000))) ; insert
584 ((value pc) (or USI
585 (or USI
586 (and USI (srl UHI value 16) #x0000ff)
587 (and USI value #x00ff00))
588 (and USI (sll UHI value 16) #xff0000))) ; extract
589)
590
591(dnmf f-dsp-40-s32 "32 bit signed" (all-isas) INT
592 (f-dsp-40-u24 f-dsp-64-u8)
593 (sequence () ; insert
594 (set (ifield f-dsp-64-u8) (and (srl (ifield f-dsp-40-s32) 24) #xff))
595 (set (ifield f-dsp-40-u24) (and (ifield f-dsp-40-s32) #xffffff))
596 )
597 (sequence () ; extract
598 (set (ifield f-dsp-40-s32) (or (and (ifield f-dsp-40-u24) #xffffff)
599 (and (sll (ifield f-dsp-64-u8) 24) #xff000000)))
600 )
601)
602
603(dnmf f-dsp-48-u24 "24 bit unsigned" (all-isas) UINT
604 (f-dsp-48-u16 f-dsp-64-u8)
605 (sequence () ; insert
606 (set (ifield f-dsp-64-u8) (and (srl (ifield f-dsp-48-u24) 16) #xff))
607 (set (ifield f-dsp-48-u16) (and (ifield f-dsp-48-u24) #xffff))
608 )
609 (sequence () ; extract
610 (set (ifield f-dsp-48-u24) (or (and (ifield f-dsp-48-u16) #xffff)
611 (and (sll (ifield f-dsp-64-u8) 16) #xff0000)))
612 )
613)
614
615(dnmf f-dsp-16-s32 "32 bit signed" (all-isas) INT
616 (f-dsp-16-u16 f-dsp-32-u16)
617 (sequence () ; insert
618 (set (ifield f-dsp-32-u16) (and (srl (ifield f-dsp-16-s32) 16) #xffff))
619 (set (ifield f-dsp-16-u16) (and (ifield f-dsp-16-s32) #xffff))
620 )
621 (sequence () ; extract
622 (set (ifield f-dsp-16-s32) (or (and (ifield f-dsp-16-u16) #xffff)
623 (and (sll (ifield f-dsp-32-u16) 16) #xffff0000)))
624 )
625)
626
627(dnmf f-dsp-24-s32 "32 bit signed" (all-isas) INT
628 (f-dsp-24-u8 f-dsp-32-u24)
629 (sequence () ; insert
630 (set (ifield f-dsp-32-u24) (and (srl (ifield f-dsp-24-s32) 8) #xffffff))
631 (set (ifield f-dsp-24-u8) (and (ifield f-dsp-24-s32) #xff))
632 )
633 (sequence () ; extract
634 (set (ifield f-dsp-24-s32) (or (and (ifield f-dsp-24-u8) #xff)
635 (and (sll (ifield f-dsp-32-u24) 8) #xffffff00)))
636 )
637)
638
639(df f-dsp-32-s32 "32 bit signed" (all-isas) 32 32 INT
640 ((value pc)
641
642 ;; insert
643 (ext INT
644 (or SI
645 (or SI
646 (and (srl value 24) #x000000ff)
647 (and (srl value 8) #x0000ff00))
648 (or SI
649 (and (sll value 8) #x00ff0000)
650 (and (sll value 24) #xff000000)))))
651
652 ;; extract
653 ((value pc)
654 (ext INT
655 (or SI
656 (or SI
657 (and (srl value 24) #x000000ff)
658 (and (srl value 8) #x0000ff00))
659 (or SI
660 (and (sll value 8) #x00ff0000)
661 (and (sll value 24) #xff000000)))))
662)
663
664(dnmf f-dsp-48-u32 "32 bit unsigned" (all-isas) UINT
665 (f-dsp-48-u16 f-dsp-64-u16)
666 (sequence () ; insert
667 (set (ifield f-dsp-64-u16) (and (srl (ifield f-dsp-48-u32) 16) #xffff))
668 (set (ifield f-dsp-48-u16) (and (ifield f-dsp-48-u32) #xffff))
669 )
670 (sequence () ; extract
671 (set (ifield f-dsp-48-u32) (or (and (ifield f-dsp-48-u16) #xffff)
672 (and (sll (ifield f-dsp-64-u16) 16) #xffff0000)))
673 )
674)
675
676(dnmf f-dsp-48-s32 "32 bit signed" (all-isas) INT
677 (f-dsp-48-u16 f-dsp-64-u16)
678 (sequence () ; insert
679 (set (ifield f-dsp-64-u16) (and (srl (ifield f-dsp-48-s32) 16) #xffff))
680 (set (ifield f-dsp-48-u16) (and (ifield f-dsp-48-s32) #xffff))
681 )
682 (sequence () ; extract
683 (set (ifield f-dsp-48-s32) (or (and (ifield f-dsp-48-u16) #xffff)
684 (and (sll (ifield f-dsp-64-u16) 16) #xffff0000)))
685 )
686)
687
688(dnmf f-dsp-56-s16 "16 bit signed" (all-isas) INT
689 (f-dsp-56-u8 f-dsp-64-u8)
690 (sequence () ; insert
691 (set (ifield f-dsp-56-u8)
692 (and (ifield f-dsp-56-s16) #xff))
693 (set (ifield f-dsp-64-u8)
694 (and (srl (ifield f-dsp-56-s16) 8) #xff))
695 )
696 (sequence () ; extract
697 (set (ifield f-dsp-56-s16)
698 (ext INT
699 (trunc HI (or (sll (ifield f-dsp-64-u8) 8)
700 (ifield f-dsp-56-u8)))))
701 )
702)
703
704(df f-dsp-64-s16 " 16 bit signed" (all-isas) 64 16 INT
705 ((value pc) (ext INT
706 (trunc HI
707 (or (and (srl value 8) #x00ff)
708 (and (sll value 8) #xff00))))) ; insert
709 ((value pc) (ext INT
710 (trunc HI
711 (or (and (srl value 8) #x00ff)
712 (and (sll value 8) #xff00))))) ; extract
713)
714
715;-------------------------------------------------------------
716; Bit indices
717;-------------------------------------------------------------
718
719(dnf f-bitno16-S "bit index for m16c" (all-isas) 5 3)
720(dnf f-bitno32-prefixed "bit index for m32c" (all-isas) 21 3)
721(dnf f-bitno32-unprefixed "bit index for m32c" (all-isas) 13 3)
722
723(dnmf f-bitbase16-u11-S "unsigned bit,base:11" (all-isas) UINT
724 (f-bitno16-S f-dsp-8-u8)
725 (sequence () ; insert
726 (set (ifield f-bitno16-S) (and f-bitbase16-u11-S #x7))
727 (set (ifield f-dsp-8-u8) (and (srl (ifield f-bitbase16-u11-S) 3) #xff))
728 )
729 (sequence () ; extract
730 (set (ifield f-bitbase16-u11-S) (or (sll (ifield f-dsp-8-u8) 3)
731 (ifield f-bitno16-S)))
732 )
733)
734
735(dnmf f-bitbase32-16-u11-unprefixed "unsigned bit,base:11" (all-isas) UINT
736 (f-bitno32-unprefixed f-dsp-16-u8)
737 (sequence () ; insert
738 (set (ifield f-bitno32-unprefixed) (and f-bitbase32-16-u11-unprefixed #x7))
739 (set (ifield f-dsp-16-u8) (and (srl (ifield f-bitbase32-16-u11-unprefixed) 3) #xff))
740 )
741 (sequence () ; extract
742 (set (ifield f-bitbase32-16-u11-unprefixed) (or (sll (ifield f-dsp-16-u8) 3)
743 (ifield f-bitno32-unprefixed)))
744 )
745)
746(dnmf f-bitbase32-16-s11-unprefixed "signed bit,base:11" (all-isas) INT
747 (f-bitno32-unprefixed f-dsp-16-s8)
748 (sequence () ; insert
749 (set (ifield f-bitno32-unprefixed) (and f-bitbase32-16-s11-unprefixed #x7))
750 (set (ifield f-dsp-16-s8) (sra INT (ifield f-bitbase32-16-s11-unprefixed) 3))
751 )
752 (sequence () ; extract
753 (set (ifield f-bitbase32-16-s11-unprefixed) (or (sll (ifield f-dsp-16-s8) 3)
754 (ifield f-bitno32-unprefixed)))
755 )
756)
757(dnmf f-bitbase32-16-u19-unprefixed "unsigned bit,base:19" (all-isas) UINT
758 (f-bitno32-unprefixed f-dsp-16-u16)
759 (sequence () ; insert
760 (set (ifield f-bitno32-unprefixed) (and f-bitbase32-16-u19-unprefixed #x7))
761 (set (ifield f-dsp-16-u16) (and (srl (ifield f-bitbase32-16-u19-unprefixed) 3) #xffff))
762 )
763 (sequence () ; extract
764 (set (ifield f-bitbase32-16-u19-unprefixed) (or (sll (ifield f-dsp-16-u16) 3)
765 (ifield f-bitno32-unprefixed)))
766 )
767)
768(dnmf f-bitbase32-16-s19-unprefixed "signed bit,base:11" (all-isas) INT
769 (f-bitno32-unprefixed f-dsp-16-s16)
770 (sequence () ; insert
771 (set (ifield f-bitno32-unprefixed) (and f-bitbase32-16-s19-unprefixed #x7))
772 (set (ifield f-dsp-16-s16) (sra INT (ifield f-bitbase32-16-s19-unprefixed) 3))
773 )
774 (sequence () ; extract
775 (set (ifield f-bitbase32-16-s19-unprefixed) (or (sll (ifield f-dsp-16-s16) 3)
776 (ifield f-bitno32-unprefixed)))
777 )
778)
779; SID decoder doesn't handle multi-ifield referencing another multi-ifield :-(
780(dnmf f-bitbase32-16-u27-unprefixed "unsigned bit,base:27" (all-isas) UINT
781 (f-bitno32-unprefixed f-dsp-16-u16 f-dsp-32-u8)
782 (sequence () ; insert
783 (set (ifield f-bitno32-unprefixed) (and f-bitbase32-16-u27-unprefixed #x7))
784 (set (ifield f-dsp-16-u16) (and (srl (ifield f-bitbase32-16-u27-unprefixed) 3) #xffff))
785 (set (ifield f-dsp-32-u8) (and (srl (ifield f-bitbase32-16-u27-unprefixed) 19) #xff))
786 )
787 (sequence () ; extract
788 (set (ifield f-bitbase32-16-u27-unprefixed) (or (sll (ifield f-dsp-16-u16) 3)
789 (or (sll (ifield f-dsp-32-u8) 19)
790 (ifield f-bitno32-unprefixed))))
791 )
792)
793(dnmf f-bitbase32-24-u11-prefixed "unsigned bit,base:11" (all-isas) UINT
794 (f-bitno32-prefixed f-dsp-24-u8)
795 (sequence () ; insert
796 (set (ifield f-bitno32-prefixed) (and f-bitbase32-24-u11-prefixed #x7))
797 (set (ifield f-dsp-24-u8) (and (srl (ifield f-bitbase32-24-u11-prefixed) 3) #xff))
798 )
799 (sequence () ; extract
800 (set (ifield f-bitbase32-24-u11-prefixed) (or (sll (ifield f-dsp-24-u8) 3)
801 (ifield f-bitno32-prefixed)))
802 )
803)
804(dnmf f-bitbase32-24-s11-prefixed "signed bit,base:11" (all-isas) INT
805 (f-bitno32-prefixed f-dsp-24-s8)
806 (sequence () ; insert
807 (set (ifield f-bitno32-prefixed) (and f-bitbase32-24-s11-prefixed #x7))
808 (set (ifield f-dsp-24-s8) (sra INT (ifield f-bitbase32-24-s11-prefixed) 3))
809 )
810 (sequence () ; extract
811 (set (ifield f-bitbase32-24-s11-prefixed) (or (sll (ifield f-dsp-24-s8) 3)
812 (ifield f-bitno32-prefixed)))
813 )
814)
815; SID decoder doesn't handle multi-ifield referencing another multi-ifield :-(
816(dnmf f-bitbase32-24-u19-prefixed "unsigned bit,base:19" (all-isas) UINT
817 (f-bitno32-prefixed f-dsp-24-u8 f-dsp-32-u8)
818 (sequence () ; insert
819 (set (ifield f-bitno32-prefixed) (and f-bitbase32-24-u19-prefixed #x7))
820 (set (ifield f-dsp-24-u8) (and (srl (ifield f-bitbase32-24-u19-prefixed) 3) #xff))
821 (set (ifield f-dsp-32-u8) (and (srl (ifield f-bitbase32-24-u19-prefixed) 11) #xff))
822 )
823 (sequence () ; extract
824 (set (ifield f-bitbase32-24-u19-prefixed) (or (sll (ifield f-dsp-24-u8) 3)
825 (or (sll (ifield f-dsp-32-u8) 11)
826 (ifield f-bitno32-prefixed))))
827 )
828)
829; SID decoder doesn't handle multi-ifield referencing another multi-ifield :-(
830(dnmf f-bitbase32-24-s19-prefixed "signed bit,base:11" (all-isas) INT
831 (f-bitno32-prefixed f-dsp-24-u8 f-dsp-32-s8)
832 (sequence () ; insert
833 (set (ifield f-bitno32-prefixed) (and f-bitbase32-24-s19-prefixed #x7))
834 (set (ifield f-dsp-24-u8) (and (srl (ifield f-bitbase32-24-s19-prefixed) 3) #xff))
835 (set (ifield f-dsp-32-s8) (sra INT (ifield f-bitbase32-24-s19-prefixed) 11))
836 )
837 (sequence () ; extract
838 (set (ifield f-bitbase32-24-s19-prefixed) (or (sll (ifield f-dsp-24-u8) 3)
839 (or (sll (ifield f-dsp-32-s8) 11)
840 (ifield f-bitno32-prefixed))))
841 )
842)
843; SID decoder doesn't handle multi-ifield referencing another multi-ifield :-(
844(dnmf f-bitbase32-24-u27-prefixed "unsigned bit,base:27" (all-isas) UINT
845 (f-bitno32-prefixed f-dsp-24-u8 f-dsp-32-u16)
846 (sequence () ; insert
847 (set (ifield f-bitno32-prefixed) (and f-bitbase32-24-u27-prefixed #x7))
848 (set (ifield f-dsp-24-u8) (and (srl (ifield f-bitbase32-24-u27-prefixed) 3) #xff))
849 (set (ifield f-dsp-32-u16) (and (srl (ifield f-bitbase32-24-u27-prefixed) 11) #xffff))
850 )
851 (sequence () ; extract
852 (set (ifield f-bitbase32-24-u27-prefixed) (or (sll (ifield f-dsp-24-u8) 3)
853 (or (sll (ifield f-dsp-32-u16) 11)
854 (ifield f-bitno32-prefixed))))
855 )
856)
857
858;-------------------------------------------------------------
859; Labels
860;-------------------------------------------------------------
861
862(df f-lab-5-3 "3 bit pc relative signed offset" (PCREL-ADDR all-isas) 5 3 INT
863 ((value pc) (sub SI value (add SI pc 2))) ; insert
864 ((value pc) (add SI value (add SI pc 2))) ; extract
865)
866(dnmf f-lab32-jmp-s "unsigned 3 bit pc relative offset" (PCREL-ADDR all-isas) UINT
867 (f-2-2 f-7-1)
868 (sequence () ; insert
869 (set (ifield f-7-1) (and (sub (ifield f-lab32-jmp-s) pc) #x1))
870 (set (ifield f-2-2) (srl (sub (ifield f-lab32-jmp-s) pc) 1))
871 )
872 (sequence () ; extract
873 (set (ifield f-lab32-jmp-s) (add pc (add (or (sll (ifield f-2-2) 1)
874 (ifield f-7-1))
875 2)))
876 )
877)
878(df f-lab-8-8 "8 bit pc relative signed offset" (PCREL-ADDR all-isas) 8 8 INT
879 ((value pc) (sub SI value (add SI pc 1))) ; insert
880 ((value pc) (add SI value (add SI pc 1))) ; extract
881)
882(df f-lab-8-16 "16 bit pc relative signed offset" (PCREL-ADDR SIGN-OPT all-isas) 8 16 UINT
883 ((value pc) (or SI (sll (and (sub value (add pc 1)) #xff) 8)
884 (srl (and (sub value (add pc 1)) #xffff) 8)))
885 ((value pc) (add SI (or (srl (and value #xffff) 8)
886 (sra (sll (and value #xff) 24) 16)) (add pc 1)))
887 )
888(df f-lab-8-24 "24 bit absolute" (all-isas ABS-ADDR) 8 24 UINT
889 ((value pc) (or SI
890 (or (srl value 16) (and value #xff00))
891 (sll (and value #xff) 16)))
892 ((value pc) (or SI
893 (or (srl value 16) (and value #xff00))
894 (sll (and value #xff) 16)))
895 )
896(df f-lab-16-8 "8 bit pc relative signed offset" (PCREL-ADDR all-isas) 16 8 INT
897 ((value pc) (sub SI value (add SI pc 2))) ; insert
898 ((value pc) (add SI value (add SI pc 2))) ; extract
899)
900(df f-lab-24-8 "8 bit pc relative signed offset" (PCREL-ADDR all-isas) 24 8 INT
901 ((value pc) (sub SI value (add SI pc 2))) ; insert
902 ((value pc) (add SI value (add SI pc 2))) ; extract
903)
904(df f-lab-32-8 "8 bit pc relative signed offset" (PCREL-ADDR all-isas) 32 8 INT
905 ((value pc) (sub SI value (add SI pc 2))) ; insert
906 ((value pc) (add SI value (add SI pc 2))) ; extract
907)
908(df f-lab-40-8 "8 bit pc relative signed offset" (PCREL-ADDR all-isas) 40 8 INT
909 ((value pc) (sub SI value (add SI pc 2))) ; insert
910 ((value pc) (add SI value (add SI pc 2))) ; extract
911)
912
913;-------------------------------------------------------------
914; Condition codes
915;-------------------------------------------------------------
916
917(dnf f-cond16 "condition code" (all-isas) 12 4)
918(dnf f-cond16j-5 "condition code" (all-isas) 5 3)
919
920(dnmf f-cond32 "condition code" (all-isas) UINT
921 (f-9-1 f-13-3)
922 (sequence () ; insert
923 (set (ifield f-9-1) (and (srl (ifield f-cond32) 3) 1))
924 (set (ifield f-13-3) (and (ifield f-cond32) #x7))
925 )
926 (sequence () ; extract
927 (set (ifield f-cond32) (or (sll (ifield f-9-1) 3)
928 (ifield f-13-3)))
929 )
930)
931
932(dnmf f-cond32j "condition code" (all-isas) UINT
933 (f-1-3 f-7-1)
934 (sequence () ; insert
935 (set (ifield f-1-3) (and (srl (ifield f-cond32j) 1) #x7))
936 (set (ifield f-7-1) (and (ifield f-cond32j) #x1))
937 )
938 (sequence () ; extract
939 (set (ifield f-cond32j) (or (sll (ifield f-1-3) 1)
940 (ifield f-7-1)))
941 )
942)
943\f
944;=============================================================
945; Hardware
946;
947(dnh h-pc "program counter" (PC all-isas) (pc USI) () () ())
948
949;-------------------------------------------------------------
950; General registers
951; The actual registers are 16 bits
952;-------------------------------------------------------------
953
954(define-hardware
955 (name h-gr)
956 (comment "general 16 bit registers")
957 (attrs all-isas CACHE-ADDR)
958 (type register HI (4))
959 (indices keyword "" (("r0" 0) ("r1" 1) ("r2" 2) ("r3" 3))))
960
961; Define different views of the grs as VIRTUAL with getter/setter specs
962;
963(define-hardware
964 (name h-gr-QI)
965 (comment "general 8 bit registers")
966 (attrs all-isas VIRTUAL)
967 (type register QI (4))
968 (indices keyword "" (("r0l" 0) ("r0h" 1) ("r1l" 2) ("r1h" 3)))
969 (get (index) (and (if SI (mod index 2)
970 (srl (reg h-gr (div index 2)) 8)
971 (reg h-gr (div index 2)))
972 #xff))
973 (set (index newval) (set (reg h-gr (div index 2))
974 (if SI (mod index 2)
975 (or (and (reg h-gr (div index 2)) #xff)
976 (sll (and newval #xff) 8))
977 (or (and (reg h-gr (div index 2)) #xff00)
978 (and newval #xff))))))
979
980(define-hardware
981 (name h-gr-HI)
982 (comment "general 16 bit registers")
983 (attrs all-isas VIRTUAL)
984 (type register HI (4))
985 (indices keyword "" (("r0" 0) ("r1" 1) ("r2" 2) ("r3" 3)))
986 (get (index) (reg h-gr index))
987 (set (index newval) (set (reg h-gr index) newval)))
988
989(define-hardware
990 (name h-gr-SI)
991 (comment "general 32 bit registers")
992 (attrs all-isas VIRTUAL)
993 (type register SI (2))
994 (indices keyword "" (("r2r0" 0) ("r3r1" 1)))
995 (get (index) (or SI
996 (and (reg h-gr index) #xffff)
997 (and (sll (reg h-gr (add index 2)) 16) #xffff0000)))
998 (set (index newval) (sequence ()
999 (set (reg h-gr index) (and newval #xffff))
1000 (set (reg h-gr (add index 2)) (srl newval 16)))))
1001
1002(define-hardware
1003 (name h-gr-ext-QI)
1004 (comment "general 16 bit registers")
1005 (attrs all-isas VIRTUAL)
1006 (type register HI (2))
1007 (indices keyword "" (("r0l" 0) ("r1l" 1)))
1008 (get (index) (reg h-gr-QI (mul index 2)))
1009 (set (index newval) (set (reg h-gr (mul index 2)) newval)))
1010
1011(define-hardware
1012 (name h-gr-ext-HI)
1013 (comment "general 16 bit registers")
1014 (attrs all-isas VIRTUAL)
1015 (type register SI (2))
1016 (indices keyword "" (("r0" 0) ("r1" 1)))
1017 (get (index) (reg h-gr (mul index 2)))
1018 (set (index newval) (set (reg h-gr-SI index) newval)))
1019
1020(define-hardware
1021 (name h-r0l)
1022 (comment "r0l register")
1023 (attrs all-isas VIRTUAL)
1024 (type register QI)
1025 (indices keyword "" (("r0l" 0)))
1026 (get () (reg h-gr-QI 0))
1027 (set (newval) (set (reg h-gr-QI 0) newval)))
1028
1029(define-hardware
1030 (name h-r0h)
1031 (comment "r0h register")
1032 (attrs all-isas VIRTUAL)
1033 (type register QI)
1034 (indices keyword "" (("r0h" 0)))
1035 (get () (reg h-gr-QI 1))
1036 (set (newval) (set (reg h-gr-QI 1) newval)))
1037
1038(define-hardware
1039 (name h-r1l)
1040 (comment "r1l register")
1041 (attrs all-isas VIRTUAL)
1042 (type register QI)
1043 (indices keyword "" (("r1l" 0)))
1044 (get () (reg h-gr-QI 2))
1045 (set (newval) (set (reg h-gr-QI 2) newval)))
1046
1047(define-hardware
1048 (name h-r1h)
1049 (comment "r1h register")
1050 (attrs all-isas VIRTUAL)
1051 (type register QI)
1052 (indices keyword "" (("r1h" 0)))
1053 (get () (reg h-gr-QI 3))
1054 (set (newval) (set (reg h-gr-QI 3) newval)))
1055
1056(define-hardware
1057 (name h-r0)
1058 (comment "r0 register")
1059 (attrs all-isas VIRTUAL)
1060 (type register HI)
1061 (indices keyword "" (("r0" 0)))
1062 (get () (reg h-gr 0))
1063 (set (newval) (set (reg h-gr 0) newval)))
1064
1065(define-hardware
1066 (name h-r1)
1067 (comment "r1 register")
1068 (attrs all-isas VIRTUAL)
1069 (type register HI)
1070 (indices keyword "" (("r1" 0)))
1071 (get () (reg h-gr 1))
1072 (set (newval) (set (reg h-gr 1) newval)))
1073
1074(define-hardware
1075 (name h-r2)
1076 (comment "r2 register")
1077 (attrs all-isas VIRTUAL)
1078 (type register HI)
1079 (indices keyword "" (("r2" 0)))
1080 (get () (reg h-gr 2))
1081 (set (newval) (set (reg h-gr 2) newval)))
1082
1083(define-hardware
1084 (name h-r3)
1085 (comment "r3 register")
1086 (attrs all-isas VIRTUAL)
1087 (type register HI)
1088 (indices keyword "" (("r3" 0)))
1089 (get () (reg h-gr 3))
1090 (set (newval) (set (reg h-gr 3) newval)))
1091
1092(define-hardware
1093 (name h-r0l-r0h)
1094 (comment "r0l or r0h")
1095 (attrs all-isas VIRTUAL)
1096 (type register QI (2))
1097 (indices keyword "" (("r0l" 0) ("r0h" 1)))
1098 (get (index) (reg h-gr-QI index))
1099 (set (index newval) (set (reg h-gr-QI index) newval)))
1100
1101(define-hardware
1102 (name h-r2r0)
1103 (comment "r2r0 register")
1104 (attrs all-isas VIRTUAL)
1105 (type register SI)
1106 (indices keyword "" (("r2r0" 0)))
1107 (get () (or (sll (reg h-gr 2) 16) (reg h-gr 0)))
1108 (set (newval)
1109 (sequence ()
1110 (set (reg h-gr 0) newval)
1111 (set (reg h-gr 2) (sra newval 16)))))
1112
1113(define-hardware
1114 (name h-r3r1)
1115 (comment "r3r1 register")
1116 (attrs all-isas VIRTUAL)
1117 (type register SI)
1118 (indices keyword "" (("r3r1" 0)))
1119 (get () (or (sll (reg h-gr 3) 16) (reg h-gr 1)))
1120 (set (newval)
1121 (sequence ()
1122 (set (reg h-gr 1) newval)
1123 (set (reg h-gr 3) (sra newval 16)))))
1124
1125(define-hardware
1126 (name h-r1r2r0)
1127 (comment "r1r2r0 register")
1128 (attrs all-isas VIRTUAL)
1129 (type register DI)
1130 (indices keyword "" (("r1r2r0" 0)))
1131 (get () (or DI (sll DI (reg h-gr 1) 32) (or (sll (reg h-gr 2) 16) (reg h-gr 0))))
1132 (set (newval)
1133 (sequence ()
1134 (set (reg h-gr 0) newval)
1135 (set (reg h-gr 2) (sra newval 16))
1136 (set (reg h-gr 1) (sra newval 32)))))
1137
1138;-------------------------------------------------------------
1139; Address registers
1140;-------------------------------------------------------------
1141
1142(define-hardware
1143 (name h-ar)
1144 (comment "address registers")
1145 (attrs all-isas)
1146 (type register USI (2))
1147 (indices keyword "" (("a0" 0) ("a1" 1)))
1148 (get (index) (c-call USI "h_ar_get_handler" index))
1149 (set (index newval) (c-call VOID "h_ar_set_handler" index newval)))
1150
1151; Define different views of the ars as VIRTUAL with getter/setter specs
1152(define-hardware
1153 (name h-ar-QI)
1154 (comment "8 bit view of address register")
1155 (attrs all-isas VIRTUAL)
1156 (type register QI (2))
1157 (indices keyword "" (("a0" 0) ("a1" 1)))
1158 (get (index) (reg h-ar index))
1159 (set (index newval) (set (reg h-ar index) newval)))
1160
1161(define-hardware
1162 (name h-ar-HI)
1163 (comment "16 bit view of address register")
1164 (attrs all-isas VIRTUAL)
1165 (type register HI (2))
1166 (indices keyword "" (("a0" 0) ("a1" 1)))
1167 (get (index) (reg h-ar index))
1168 (set (index newval) (set (reg h-ar index) newval)))
1169
1170(define-hardware
1171 (name h-ar-SI)
1172 (comment "32 bit view of address register")
1173 (attrs all-isas VIRTUAL)
1174 (type register SI)
1175 (indices keyword "" (("a1a0" 0)))
1176 (get () (or SI (sll SI (ext SI (reg h-ar 1)) 16) (ext SI (reg h-ar 0))))
1177 (set (newval) (sequence ()
1178 (set (reg h-ar 0) (and newval #xffff))
1179 (set (reg h-ar 1) (and (srl newval 16) #xffff)))))
1180
1181(define-hardware
1182 (name h-a0)
1183 (comment "16 bit view of address register")
1184 (attrs all-isas VIRTUAL)
1185 (type register HI)
1186 (indices keyword "" (("a0" 0)))
1187 (get () (reg h-ar 0))
1188 (set (newval) (set (reg h-ar 0) newval)))
1189
1190(define-hardware
1191 (name h-a1)
1192 (comment "16 bit view of address register")
1193 (attrs all-isas VIRTUAL)
1194 (type register HI)
1195 (indices keyword "" (("a1" 1)))
1196 (get () (reg h-ar 1))
1197 (set (newval) (set (reg h-ar 1) newval)))
1198
1199; SB Register
1200(define-hardware
1201 (name h-sb)
1202 (comment "SB register")
1203 (attrs all-isas)
1204 (type register USI)
1205 (get () (c-call USI "h_sb_get_handler"))
1206 (set (newval) (c-call VOID "h_sb_set_handler" newval))
1207)
1208
1209; FB Register
1210(define-hardware
1211 (name h-fb)
1212 (comment "FB register")
1213 (attrs all-isas)
1214 (type register USI)
1215 (get () (c-call USI "h_fb_get_handler"))
1216 (set (newval) (c-call VOID "h_fb_set_handler" newval))
1217)
1218
1219; SP Register
1220(define-hardware
1221 (name h-sp)
1222 (comment "SP register")
1223 (attrs all-isas)
1224 (type register USI)
1225 (get () (c-call USI "h_sp_get_handler"))
1226 (set (newval) (c-call VOID "h_sp_set_handler" newval))
1227)
1228
1229;-------------------------------------------------------------
1230; condition-code bits
1231;-------------------------------------------------------------
1232
1233(define-hardware
1234 (name h-sbit)
1235 (comment "sign bit")
1236 (attrs all-isas)
1237 (type register BI)
1238)
1239
1240(define-hardware
1241 (name h-zbit)
1242 (comment "zero bit")
1243 (attrs all-isas)
1244 (type register BI)
1245)
1246
1247(define-hardware
1248 (name h-obit)
1249 (comment "overflow bit")
1250 (attrs all-isas)
1251 (type register BI)
1252)
1253
1254(define-hardware
1255 (name h-cbit)
1256 (comment "carry bit")
1257 (attrs all-isas)
1258 (type register BI)
1259)
1260
1261(define-hardware
1262 (name h-ubit)
1263 (comment "stack pointer select bit")
1264 (attrs all-isas)
1265 (type register BI)
1266)
1267
1268(define-hardware
1269 (name h-ibit)
1270 (comment "interrupt enable bit")
1271 (attrs all-isas)
1272 (type register BI)
1273)
1274
1275(define-hardware
1276 (name h-bbit)
1277 (comment "register bank select bit")
1278 (attrs all-isas)
1279 (type register BI)
1280)
1281
1282(define-hardware
1283 (name h-dbit)
1284 (comment "debug bit")
1285 (attrs all-isas)
1286 (type register BI)
1287)
1288
1289(define-hardware
1290 (name h-dct0)
1291 (comment "dma transfer count 000")
1292 (attrs all-isas)
1293 (type register UHI)
1294)
1295(define-hardware
1296 (name h-dct1)
1297 (comment "dma transfer count 001")
1298 (attrs all-isas)
1299 (type register UHI)
1300)
1301(define-hardware
1302 (name h-svf)
1303 (comment "save flag 011")
1304 (attrs all-isas)
1305 (type register UHI)
1306)
1307(define-hardware
1308 (name h-drc0)
1309 (comment "dma transfer count reload 100")
1310 (attrs all-isas)
1311 (type register UHI)
1312)
1313(define-hardware
1314 (name h-drc1)
1315 (comment "dma transfer count reload 101")
1316 (attrs all-isas)
1317 (type register UHI)
1318)
1319(define-hardware
1320 (name h-dmd0)
1321 (comment "dma mode 110")
1322 (attrs all-isas)
1323 (type register UQI)
1324)
1325(define-hardware
1326 (name h-dmd1)
1327 (comment "dma mode 111")
1328 (attrs all-isas)
1329 (type register UQI)
1330)
1331(define-hardware
1332 (name h-intb)
1333 (comment "interrupt table 000")
1334 (attrs all-isas)
1335 (type register USI)
1336)
1337(define-hardware
1338 (name h-svp)
1339 (comment "save pc 100")
1340 (attrs all-isas)
1341 (type register UHI)
1342)
1343(define-hardware
1344 (name h-vct)
1345 (comment "vector 101")
1346 (attrs all-isas)
1347 (type register USI)
1348)
1349(define-hardware
1350 (name h-isp)
1351 (comment "interrupt stack ptr 111")
1352 (attrs all-isas)
1353 (type register USI)
1354)
1355(define-hardware
1356 (name h-dma0)
1357 (comment "dma mem addr 010")
1358 (attrs all-isas)
1359 (type register USI)
1360)
1361(define-hardware
1362 (name h-dma1)
1363 (comment "dma mem addr 011")
1364 (attrs all-isas)
1365 (type register USI)
1366)
1367(define-hardware
1368 (name h-dra0)
1369 (comment "dma mem addr reload 100")
1370 (attrs all-isas)
1371 (type register USI)
1372)
1373(define-hardware
1374 (name h-dra1)
1375 (comment "dma mem addr reload 101")
1376 (attrs all-isas)
1377 (type register USI)
1378)
1379(define-hardware
1380 (name h-dsa0)
1381 (comment "dma sfr addr 110")
1382 (attrs all-isas)
1383 (type register USI)
1384)
1385(define-hardware
1386 (name h-dsa1)
1387 (comment "dma sfr addr 111")
1388 (attrs all-isas)
1389 (type register USI)
1390)
1391
1392;-------------------------------------------------------------
1393; Condition code operand hardware
1394;-------------------------------------------------------------
1395
1396(define-hardware
1397 (name h-cond16)
1398 (comment "condition code hardware for m16c")
1399 (attrs m16c-isa MACH16)
1400 (type immediate UQI)
1401 (values keyword ""
1402 (("geu" #x00) ("c" #x00)
1403 ("gtu" #x01)
1404 ("eq" #x02) ("z" #x02)
1405 ("n" #x03)
1406 ("le" #x04)
1407 ("o" #x05)
1408 ("ge" #x06)
1409 ("ltu" #xf8) ("nc" #xf8)
1410 ("leu" #xf9)
1411 ("ne" #xfa) ("nz" #xfa)
1412 ("pz" #xfb)
1413 ("gt" #xfc)
1414 ("no" #xfd)
1415 ("lt" #xfe)
1416 )
1417 )
1418)
1419(define-hardware
1420 (name h-cond16c)
1421 (comment "condition code hardware for m16c")
1422 (attrs m16c-isa MACH16)
1423 (type immediate UQI)
1424 (values keyword ""
1425 (("geu" #x00) ("c" #x00)
1426 ("gtu" #x01)
1427 ("eq" #x02) ("z" #x02)
1428 ("n" #x03)
1429 ("ltu" #x04) ("nc" #x04)
1430 ("leu" #x05)
1431 ("ne" #x06) ("nz" #x06)
1432 ("pz" #x07)
1433 ("le" #x08)
1434 ("o" #x09)
1435 ("ge" #x0a)
1436 ("gt" #x0c)
1437 ("no" #x0d)
1438 ("lt" #x0e)
1439 )
1440 )
1441)
1442(define-hardware
1443 (name h-cond16j)
1444 (comment "condition code hardware for m16c")
1445 (attrs m16c-isa MACH16)
1446 (type immediate UQI)
1447 (values keyword ""
1448 (("le" #x08)
1449 ("o" #x09)
1450 ("ge" #x0a)
1451 ("gt" #x0c)
1452 ("no" #x0d)
1453 ("lt" #x0e)
1454 )
1455 )
1456)
1457(define-hardware
1458 (name h-cond16j-5)
1459 (comment "condition code hardware for m16c")
1460 (attrs m16c-isa MACH16)
1461 (type immediate UQI)
1462 (values keyword ""
1463 (("geu" #x00) ("c" #x00)
1464 ("gtu" #x01)
1465 ("eq" #x02) ("z" #x02)
1466 ("n" #x03)
1467 ("ltu" #x04) ("nc" #x04)
1468 ("leu" #x05)
1469 ("ne" #x06) ("nz" #x06)
1470 ("pz" #x07)
1471 )
1472 )
1473)
1474
1475(define-hardware
1476 (name h-cond32)
1477 (comment "condition code hardware for m32c")
1478 (attrs m32c-isa MACH32)
1479 (type immediate UQI)
1480 (values keyword ""
1481 (("ltu" #x00) ("nc" #x00)
1482 ("leu" #x01)
1483 ("ne" #x02) ("nz" #x02)
1484 ("pz" #x03)
1485 ("no" #x04)
1486 ("gt" #x05)
1487 ("ge" #x06)
1488 ("geu" #x08) ("c" #x08)
1489 ("gtu" #x09)
1490 ("eq" #x0a) ("z" #x0a)
1491 ("n" #x0b)
1492 ("o" #x0c)
1493 ("le" #x0d)
1494 ("lt" #x0e)
1495 )
1496 )
1497)
1498
1499(define-hardware
1500 (name h-cr1-32)
1501 (comment "control registers")
1502 (attrs m32c-isa MACH32)
1503 (type immediate UQI)
1504 (values keyword "" (("dct0" 0) ("dct1" 1) ("flg" 2) ("svf" 3) ("drc0" 4)
1505 ("drc1" 5) ("dmd0" 6) ("dmd1" 7))))
1506(define-hardware
1507 (name h-cr2-32)
1508 (comment "control registers")
1509 (attrs m32c-isa MACH32)
1510 (type immediate UQI)
1511 (values keyword "" (("intb" 0) ("sp" 1) ("sb" 2) ("fb" 3) ("svp" 4)
1512 ("vct" 5) ("isp" 7))))
1513
1514(define-hardware
1515 (name h-cr3-32)
1516 (comment "control registers")
1517 (attrs m32c-isa MACH32)
1518 (type immediate UQI)
1519 (values keyword "" (("dma0" 2) ("dma1" 3) ("dra0" 4)
1520 ("dra1" 5) ("dsa0" 6) ("dsa1" 7))))
1521(define-hardware
1522 (name h-cr-16)
1523 (comment "control registers")
1524 (attrs m16c-isa MACH16)
1525 (type immediate UQI)
1526 (values keyword "" (("intbl" 1) ("intbh" 2) ("flg" 3) ("isp" 4)
1527 ("sp" 5) ("sb" 6) ("fb" 7))))
1528
1529(define-hardware
1530 (name h-flags)
1531 (comment "flag hardware for m32c")
1532 (attrs all-isas)
1533 (type immediate UQI)
1534 (values keyword ""
1535 (("c" #x0)
1536 ("d" #x1)
1537 ("z" #x2)
1538 ("s" #x3)
1539 ("b" #x4)
1540 ("o" #x5)
1541 ("i" #x6)
1542 ("u" #x7)
1543 )
1544 )
1545)
1546
1547;-------------------------------------------------------------
1548; Misc helper hardware
1549;-------------------------------------------------------------
1550
1551(define-hardware
1552 (name h-shimm)
1553 (comment "shift immediate")
1554 (attrs all-isas)
1555 (type immediate (INT 4))
1556 (values keyword "" (("1" 0) ("2" 1) ("3" 2) ("4" 3) ("5" 4) ("6" 5) ("7" 6)
1557 ("8" 7) ("-1" -8) ("-2" -7) ("-3" -6) ("-4" -5) ("-5" -4)
1558 ("-6" -3) ("-7" -2) ("-8" -1)
1559 )))
1560(define-hardware
1561 (name h-bit-index)
1562 (comment "bit index for the next insn")
1563 (attrs m32c-isa MACH32)
1564 (type register UHI)
1565)
1566(define-hardware
1567 (name h-src-index)
1568 (comment "source index for the next insn")
1569 (attrs m32c-isa MACH32)
1570 (type register UHI)
1571)
1572(define-hardware
1573 (name h-dst-index)
1574 (comment "destination index for the next insn")
1575 (attrs m32c-isa MACH32)
1576 (type register UHI)
1577)
1578(define-hardware
1579 (name h-src-indirect)
1580 (comment "indirect src for the next insn")
1581 (attrs all-isas)
1582 (type register UHI)
1583)
1584(define-hardware
1585 (name h-dst-indirect)
1586 (comment "indirect dst for the next insn")
1587 (attrs all-isas)
1588 (type register UHI)
1589)
1590(define-hardware
1591 (name h-none)
1592 (comment "for storing unused values")
1593 (attrs m32c-isa MACH32)
1594 (type register SI)
1595)
1596\f
1597;=============================================================
1598; Operands
1599;-------------------------------------------------------------
1600; Source Registers
1601;-------------------------------------------------------------
1602
1603(dnop Src16RnQI "general register QI view" (MACH16 m16c-isa) h-gr-QI f-src16-rn)
1604(dnop Src16RnHI "general register QH view" (MACH16 m16c-isa) h-gr-HI f-src16-rn)
1605
1606(dnop Src32RnUnprefixedQI "general register QI view" (MACH32 m32c-isa) h-gr-QI f-src32-rn-unprefixed-QI)
1607(dnop Src32RnUnprefixedHI "general register HI view" (MACH32 m32c-isa) h-gr-HI f-src32-rn-unprefixed-HI)
1608(dnop Src32RnUnprefixedSI "general register SI view" (MACH32 m32c-isa) h-gr-SI f-src32-rn-unprefixed-SI)
1609
1610(dnop Src32RnPrefixedQI "general register QI view" (MACH32 m32c-isa) h-gr-QI f-src32-rn-prefixed-QI)
1611(dnop Src32RnPrefixedHI "general register HI view" (MACH32 m32c-isa) h-gr-HI f-src32-rn-prefixed-HI)
1612(dnop Src32RnPrefixedSI "general register SI view" (MACH32 m32c-isa) h-gr-SI f-src32-rn-prefixed-SI)
1613
1614(dnop Src16An "address register" (MACH16 m16c-isa) h-ar f-src16-an)
1615(dnop Src16AnQI "address register QI view" (MACH16 m16c-isa) h-ar-QI f-src16-an)
1616(dnop Src16AnHI "address register HI view" (MACH16 m16c-isa) h-ar-HI f-src16-an)
1617
1618(dnop Src32AnUnprefixed "address register" (MACH32 m32c-isa) h-ar f-src32-an-unprefixed)
1619(dnop Src32AnUnprefixedQI "address register QI view" (MACH32 m32c-isa) h-ar-QI f-src32-an-unprefixed)
1620(dnop Src32AnUnprefixedHI "address register HI view" (MACH32 m32c-isa) h-ar-HI f-src32-an-unprefixed)
1621(dnop Src32AnUnprefixedSI "address register SI view" (MACH32 m32c-isa) h-ar f-src32-an-unprefixed)
1622
1623(dnop Src32AnPrefixed "address register" (MACH32 m32c-isa) h-ar f-src32-an-prefixed)
1624(dnop Src32AnPrefixedQI "address register QI view" (MACH32 m32c-isa) h-ar-QI f-src32-an-prefixed)
1625(dnop Src32AnPrefixedHI "address register HI view" (MACH32 m32c-isa) h-ar-HI f-src32-an-prefixed)
1626(dnop Src32AnPrefixedSI "address register SI view" (MACH32 m32c-isa) h-ar f-src32-an-prefixed)
1627
1628; Destination Registers
1629;
1630(dnop Dst16RnQI "general register QI view" (MACH16 m16c-isa) h-gr-QI f-dst16-rn)
1631(dnop Dst16RnHI "general register HI view" (MACH16 m16c-isa) h-gr-HI f-dst16-rn)
1632(dnop Dst16RnSI "general register SI view" (MACH16 m16c-isa) h-gr-SI f-dst16-rn)
1633(dnop Dst16RnExtQI "general register QI/HI view for 'ext' insns" (MACH16 m16c-isa) h-gr-ext-QI f-dst16-rn-ext)
1634
1635(dnop Dst32R0QI-S "general register QI view" (MACH32 m32c-isa) h-r0l f-nil)
1636(dnop Dst32R0HI-S "general register HI view" (MACH32 m32c-isa) h-r0 f-nil)
1637
1638(dnop Dst32RnUnprefixedQI "general register QI view" (MACH32 m32c-isa) h-gr-QI f-dst32-rn-unprefixed-QI)
1639(dnop Dst32RnUnprefixedHI "general register HI view" (MACH32 m32c-isa) h-gr-HI f-dst32-rn-unprefixed-HI)
1640(dnop Dst32RnUnprefixedSI "general register SI view" (MACH32 m32c-isa) h-gr-SI f-dst32-rn-unprefixed-SI)
1641(dnop Dst32RnExtUnprefixedQI "general register QI view" (MACH32 m32c-isa) h-gr-ext-QI f-dst32-rn-ext-unprefixed)
1642(dnop Dst32RnExtUnprefixedHI "general register HI view" (MACH32 m32c-isa) h-gr-ext-HI f-dst32-rn-ext-unprefixed)
1643
1644(dnop Dst32RnPrefixedQI "general register QI view" (MACH32 m32c-isa) h-gr-QI f-dst32-rn-prefixed-QI)
1645(dnop Dst32RnPrefixedHI "general register HI view" (MACH32 m32c-isa) h-gr-HI f-dst32-rn-prefixed-HI)
1646(dnop Dst32RnPrefixedSI "general register SI view" (MACH32 m32c-isa) h-gr-SI f-dst32-rn-prefixed-SI)
1647
1648(dnop Dst16RnQI-S "general register QI view" (MACH16 m16c-isa) h-r0l-r0h f-dst16-rn-QI-s)
1649
1650(dnop Dst16AnQI-S "address register QI view" (MACH16 m16c-isa) h-ar-QI f-dst16-rn-QI-s)
1651
1652(dnop Bit16Rn "general register bit view" (MACH16 m16c-isa) h-gr-HI f-dst16-rn)
1653
1654(dnop Bit32RnPrefixed "general register bit view" (MACH32 m32c-isa) h-gr-QI f-dst32-rn-prefixed-QI)
1655(dnop Bit32RnUnprefixed "general register bit view" (MACH32 m32c-isa) h-gr-QI f-dst32-rn-unprefixed-QI)
1656
1657(dnop R0 "r0" (all-isas) h-r0 f-nil)
1658(dnop R1 "r1" (all-isas) h-r1 f-nil)
1659(dnop R2 "r2" (all-isas) h-r2 f-nil)
1660(dnop R3 "r3" (all-isas) h-r3 f-nil)
1661(dnop R0l "r0l" (all-isas) h-r0l f-nil)
1662(dnop R0h "r0h" (all-isas) h-r0h f-nil)
1663(dnop R2R0 "r2r0" (all-isas) h-r2r0 f-nil)
1664(dnop R3R1 "r3r1" (all-isas) h-r3r1 f-nil)
1665(dnop R1R2R0 "r1r2r0" (all-isas) h-r1r2r0 f-nil)
1666
1667(dnop Dst16An "address register" (MACH16 m16c-isa) h-ar f-dst16-an)
1668(dnop Dst16AnQI "address register QI view" (MACH16 m16c-isa) h-ar-QI f-dst16-an)
1669(dnop Dst16AnHI "address register HI view" (MACH16 m16c-isa) h-ar-HI f-dst16-an)
1670(dnop Dst16AnSI "address register SI view" (MACH16 m16c-isa) h-ar-SI f-dst16-an)
1671(dnop Dst16An-S "address register HI view" (MACH16 m16c-isa) h-ar-HI f-dst16-an-s)
1672
1673(dnop Dst32AnUnprefixed "address register" (MACH32 m32c-isa) h-ar f-dst32-an-unprefixed)
1674(dnop Dst32AnUnprefixedQI "address register QI view" (MACH32 m32c-isa) h-ar-QI f-dst32-an-unprefixed)
1675(dnop Dst32AnUnprefixedHI "address register HI view" (MACH32 m32c-isa) h-ar-HI f-dst32-an-unprefixed)
1676(dnop Dst32AnUnprefixedSI "address register SI view" (MACH32 m32c-isa) h-ar f-dst32-an-unprefixed)
1677
1678(dnop Dst32AnExtUnprefixed "address register" (MACH32 m32c-isa) h-ar f-dst32-an-unprefixed)
1679
1680(dnop Dst32AnPrefixed "address register" (MACH32 m32c-isa) h-ar f-dst32-an-prefixed)
1681(dnop Dst32AnPrefixedQI "address register QI view" (MACH32 m32c-isa) h-ar-QI f-dst32-an-prefixed)
1682(dnop Dst32AnPrefixedHI "address register HI view" (MACH32 m32c-isa) h-ar-HI f-dst32-an-prefixed)
1683(dnop Dst32AnPrefixedSI "address register SI view" (MACH32 m32c-isa) h-ar f-dst32-an-prefixed)
1684
1685(dnop Bit16An "address register bit view" (MACH16 m16c-isa) h-ar f-dst16-an)
1686
1687(dnop Bit32AnPrefixed "address register bit" (MACH32 m32c-isa) h-ar f-dst32-an-prefixed)
1688(dnop Bit32AnUnprefixed "address register bit" (MACH32 m32c-isa) h-ar f-dst32-an-unprefixed)
1689
1690(dnop A0 "a0" (all-isas) h-a0 f-nil)
1691(dnop A1 "a1" (all-isas) h-a1 f-nil)
1692
1693(dnop sb "SB register" (all-isas SEM-ONLY) h-sb f-nil)
1694(dnop fb "FB register" (all-isas SEM-ONLY) h-fb f-nil)
1695(dnop sp "SP register" (all-isas SEM-ONLY) h-sp f-nil)
1696
1697(define-full-operand SrcDst16-r0l-r0h-S-normal "r0l/r0h pair" (MACH16 m16c-isa)
1698 h-sint DFLT f-5-1
1699 ((parse "r0l_r0h") (print "r0l_r0h")) () ()
1700)
1701
1702(define-full-operand Regsetpop "popm regset" (all-isas) h-uint
1703 DFLT f-8-8 ((parse "pop_regset") (print "pop_regset")) () ())
1704(define-full-operand Regsetpush "pushm regset" (all-isas) h-uint
1705 DFLT f-8-8 ((parse "push_regset") (print "push_regset")) () ())
1706
1707(dnop Rn16-push-S "r0[lh]" (MACH16 m16c-isa) h-gr-QI f-4-1)
1708(dnop An16-push-S "a[01]" (MACH16 m16c-isa) h-ar-HI f-4-1)
1709
1710;-------------------------------------------------------------
1711; Offsets and absolutes
1712;-------------------------------------------------------------
1713
1714(define-full-operand Dsp-8-u6 "unsigned 6 bit displacement at offset 8 bits" (all-isas)
1715 h-uint DFLT f-dsp-8-u6
1716 ((parse "unsigned6")) () ()
1717)
1718(define-full-operand Dsp-8-u8 "unsigned 8 bit displacement at offset 8 bits" (all-isas)
1719 h-uint DFLT f-dsp-8-u8
1720 ((parse "unsigned8")) () ()
1721)
1722(define-full-operand Dsp-8-u16 "unsigned 16 bit displacement at offset 8 bits" (all-isas)
1723 h-uint DFLT f-dsp-8-u16
1724 ((parse "unsigned16")) () ()
1725)
1726(define-full-operand Dsp-8-s8 "signed 8 bit displacement at offset 8 bits" (all-isas)
1727 h-sint DFLT f-dsp-8-s8
1728 ((parse "signed8")) () ()
1729)
1730(define-full-operand Dsp-10-u6 "unsigned 6 bit displacement at offset 10 bits" (all-isas)
1731 h-uint DFLT f-dsp-10-u6
1732 ((parse "unsigned6")) () ()
1733)
1734(define-full-operand Dsp-16-u8 "unsigned 8 bit displacement at offset 16 bits" (all-isas)
1735 h-uint DFLT f-dsp-16-u8
1736 ((parse "unsigned8")) () ()
1737)
1738(define-full-operand Dsp-16-u16 "unsigned 16 bit displacement at offset 16 bits" (all-isas)
1739 h-uint DFLT f-dsp-16-u16
1740 ((parse "unsigned16")) () ()
1741)
1742(define-full-operand Dsp-16-u20 "unsigned 20 bit displacement at offset 16 bits" (all-isas)
1743 h-uint DFLT f-dsp-16-u24
1744 ((parse "unsigned20")) () ()
1745)
1746(define-full-operand Dsp-16-u24 "unsigned 24 bit displacement at offset 16 bits" (all-isas)
1747 h-uint DFLT f-dsp-16-u24
1748 ((parse "unsigned24")) () ()
1749)
1750(define-full-operand Dsp-16-s8 "signed 8 bit displacement at offset 16 bits" (all-isas)
1751 h-sint DFLT f-dsp-16-s8
1752 ((parse "signed8")) () ()
1753)
1754(define-full-operand Dsp-16-s16 "signed 16 bit displacement at offset 16 bits" (all-isas)
1755 h-sint DFLT f-dsp-16-s16
1756 ((parse "signed16")) () ()
1757)
1758(define-full-operand Dsp-24-u8 "unsigned 8 bit displacement at offset 24 bits" (all-isas)
1759 h-uint DFLT f-dsp-24-u8
1760 ((parse "unsigned8")) () ()
1761)
1762(define-full-operand Dsp-24-u16 "unsigned 16 bit displacement at offset 24 bits" (all-isas)
1763 h-uint DFLT f-dsp-24-u16
1764 ((parse "unsigned16")) () ()
1765)
1766(define-full-operand Dsp-24-u20 "unsigned 20 bit displacement at offset 24 bits" (all-isas)
1767 h-uint DFLT f-dsp-24-u24
1768 ((parse "unsigned20")) () ()
1769)
1770(define-full-operand Dsp-24-u24 "unsigned 24 bit displacement at offset 24 bits" (all-isas)
1771 h-uint DFLT f-dsp-24-u24
1772 ((parse "unsigned24")) () ()
1773)
1774(define-full-operand Dsp-24-s8 "signed 8 bit displacement at offset 24 bits" (all-isas)
1775 h-sint DFLT f-dsp-24-s8
1776 ((parse "signed8")) () ()
1777)
1778(define-full-operand Dsp-24-s16 "signed 16 bit displacement at offset 24 bits" (all-isas)
1779 h-sint DFLT f-dsp-24-s16
1780 ((parse "signed16")) () ()
1781)
1782(define-full-operand Dsp-32-u8 "unsigned 8 bit displacement at offset 32 bits" (all-isas)
1783 h-uint DFLT f-dsp-32-u8
1784 ((parse "unsigned8")) () ()
1785)
1786(define-full-operand Dsp-32-u16 "unsigned 16 bit displacement at offset 32 bits" (all-isas)
1787 h-uint DFLT f-dsp-32-u16
1788 ((parse "unsigned16")) () ()
1789)
1790(define-full-operand Dsp-32-u24 "unsigned 24 bit displacement at offset 32 bits" (all-isas)
1791 h-uint DFLT f-dsp-32-u24
1792 ((parse "unsigned24")) () ()
1793)
1794(define-full-operand Dsp-32-u20 "unsigned 20 bit displacement at offset 32 bits" (all-isas)
1795 h-uint DFLT f-dsp-32-u24
1796 ((parse "unsigned20")) () ()
1797)
1798(define-full-operand Dsp-32-s8 "signed 8 bit displacement at offset 32 bits" (all-isas)
1799 h-sint DFLT f-dsp-32-s8
1800 ((parse "signed8")) () ()
1801)
1802(define-full-operand Dsp-32-s16 "signed 16 bit displacement at offset 32 bits" (all-isas)
1803 h-sint DFLT f-dsp-32-s16
1804 ((parse "signed16")) () ()
1805)
1806(define-full-operand Dsp-40-u8 "unsigned 8 bit displacement at offset 40 bits" (all-isas)
1807 h-uint DFLT f-dsp-40-u8
1808 ((parse "unsigned8")) () ()
1809)
1810(define-full-operand Dsp-40-s8 "signed 8 bit displacement at offset 40 bits" (all-isas)
1811 h-uint DFLT f-dsp-40-s8
1812 ((parse "signed8")) () ()
1813)
1814(define-full-operand Dsp-40-u16 "unsigned 16 bit displacement at offset 40 bits" (all-isas)
1815 h-uint DFLT f-dsp-40-u16
1816 ((parse "unsigned16")) () ()
1817)
1818(define-full-operand Dsp-40-s16 "signed 16 bit displacement at offset 40 bits" (all-isas)
1819 h-uint DFLT f-dsp-40-s16
1820 ((parse "signed16")) () ()
1821)
1822(define-full-operand Dsp-40-u24 "unsigned 24 bit displacement at offset 40 bits" (all-isas)
1823 h-uint DFLT f-dsp-40-u24
1824 ((parse "unsigned24")) () ()
1825)
1826(define-full-operand Dsp-48-u8 "unsigned 8 bit displacement at offset 48 bits" (all-isas)
1827 h-uint DFLT f-dsp-48-u8
1828 ((parse "unsigned8")) () ()
1829)
1830(define-full-operand Dsp-48-s8 "signed 8 bit displacement at offset 48 bits" (all-isas)
1831 h-uint DFLT f-dsp-48-s8
1832 ((parse "signed8")) () ()
1833)
1834(define-full-operand Dsp-48-u16 "unsigned 16 bit displacement at offset 48 bits" (all-isas)
1835 h-uint DFLT f-dsp-48-u16
1836 ((parse "unsigned16")) () ()
1837)
1838(define-full-operand Dsp-48-s16 "signed 16 bit displacement at offset 48 bits" (all-isas)
1839 h-uint DFLT f-dsp-48-s16
1840 ((parse "signed16")) () ()
1841)
1842(define-full-operand Dsp-48-u24 "unsigned 24 bit displacement at offset 48 bits" (all-isas)
1843 h-uint DFLT f-dsp-48-u24
1844 ((parse "unsigned24")) () ()
1845)
1846
1847(define-full-operand Imm-8-s4 "signed 4 bit immediate at offset 8 bits" (all-isas)
1848 h-sint DFLT f-imm-8-s4
1849 ((parse "signed4")) () ()
1850)
1851(define-full-operand Imm-sh-8-s4 "signed 4 bit shift immediate at offset 8 bits" (all-isas)
1852 h-shimm DFLT f-imm-8-s4
1853 () () ()
1854)
1855(define-full-operand Imm-8-QI "signed 8 bit immediate at offset 8 bits" (all-isas)
1856 h-sint DFLT f-dsp-8-s8
1857 ((parse "signed8")) () ()
1858)
1859(define-full-operand Imm-8-HI "signed 16 bit immediate at offset 8 bits" (all-isas)
1860 h-sint DFLT f-dsp-8-s16
1861 ((parse "signed16")) () ()
1862)
1863(define-full-operand Imm-12-s4 "signed 4 bit immediate at offset 12 bits" (all-isas)
1864 h-sint DFLT f-imm-12-s4
1865 ((parse "signed4")) () ()
1866)
1867(define-full-operand Imm-sh-12-s4 "signed 4 bit shift immediate at offset 12 bits" (all-isas)
1868 h-shimm DFLT f-imm-12-s4
1869 () () ()
1870)
1871(define-full-operand Imm-13-u3 "signed 3 bit immediate at offset 13 bits" (all-isas)
1872 h-uint DFLT f-imm-13-u3
1873 ((parse "signed4")) () ()
1874)
1875(define-full-operand Imm-20-s4 "signed 4 bit immediate at offset 20 bits" (all-isas)
1876 h-sint DFLT f-imm-20-s4
1877 ((parse "signed4")) () ()
1878)
1879(define-full-operand Imm-sh-20-s4 "signed 4 bit shift immediate at offset 12 bits" (all-isas)
1880 h-shimm DFLT f-imm-20-s4
1881 () () ()
1882)
1883(define-full-operand Imm-16-QI "signed 8 bit immediate at offset 16 bits" (all-isas)
1884 h-sint DFLT f-dsp-16-s8
1885 ((parse "signed8")) () ()
1886)
1887(define-full-operand Imm-16-HI "signed 16 bit immediate at offset 16 bits" (all-isas)
1888 h-sint DFLT f-dsp-16-s16
1889 ((parse "signed16")) () ()
1890)
1891(define-full-operand Imm-16-SI "signed 32 bit immediate at offset 16 bits" (all-isas)
1892 h-sint DFLT f-dsp-16-s32
1893 ((parse "signed32")) () ()
1894)
1895(define-full-operand Imm-24-QI "signed 8 bit immediate at offset 24 bits" (all-isas)
1896 h-sint DFLT f-dsp-24-s8
1897 ((parse "signed8")) () ()
1898)
1899(define-full-operand Imm-24-HI "signed 16 bit immediate at offset 24 bits" (all-isas)
1900 h-sint DFLT f-dsp-24-s16
1901 ((parse "signed16")) () ()
1902)
1903(define-full-operand Imm-24-SI "signed 32 bit immediate at offset 24 bits" (all-isas)
1904 h-sint DFLT f-dsp-24-s32
1905 ((parse "signed32")) () ()
1906)
1907(define-full-operand Imm-32-QI "signed 8 bit immediate at offset 32 bits" (all-isas)
1908 h-sint DFLT f-dsp-32-s8
1909 ((parse "signed8")) () ()
1910)
1911(define-full-operand Imm-32-SI "signed 32 bit immediate at offset 32 bits" (all-isas)
1912 h-sint DFLT f-dsp-32-s32
1913 ((parse "signed32")) () ()
1914)
1915(define-full-operand Imm-32-HI "signed 16 bit immediate at offset 32 bits" (all-isas)
1916 h-sint DFLT f-dsp-32-s16
1917 ((parse "signed16")) () ()
1918)
1919(define-full-operand Imm-40-QI "signed 8 bit immediate at offset 40 bits" (all-isas)
1920 h-sint DFLT f-dsp-40-s8
1921 ((parse "signed8")) () ()
1922)
1923(define-full-operand Imm-40-HI "signed 16 bit immediate at offset 40 bits" (all-isas)
1924 h-sint DFLT f-dsp-40-s16
1925 ((parse "signed16")) () ()
1926)
1927(define-full-operand Imm-40-SI "signed 32 bit immediate at offset 40 bits" (all-isas)
1928 h-sint DFLT f-dsp-40-s32
1929 ((parse "signed32")) () ()
1930)
1931(define-full-operand Imm-48-QI "signed 8 bit immediate at offset 48 bits" (all-isas)
1932 h-sint DFLT f-dsp-48-s8
1933 ((parse "signed8")) () ()
1934)
1935(define-full-operand Imm-48-HI "signed 16 bit immediate at offset 48 bits" (all-isas)
1936 h-sint DFLT f-dsp-48-s16
1937 ((parse "signed16")) () ()
1938)
1939(define-full-operand Imm-48-SI "signed 32 bit immediate at offset 48 bits" (all-isas)
1940 h-sint DFLT f-dsp-48-s32
1941 ((parse "signed32")) () ()
1942)
1943(define-full-operand Imm-56-QI "signed 8 bit immediate at offset 56 bits" (all-isas)
1944 h-sint DFLT f-dsp-56-s8
1945 ((parse "signed8")) () ()
1946)
1947(define-full-operand Imm-56-HI "signed 16 bit immediate at offset 56 bits" (all-isas)
1948 h-sint DFLT f-dsp-56-s16
1949 ((parse "signed16")) () ()
1950)
1951(define-full-operand Imm-64-HI "signed 16 bit immediate at offset 64 bits" (all-isas)
1952 h-sint DFLT f-dsp-64-s16
1953 ((parse "signed16")) () ()
1954)
1955(define-full-operand Imm1-S "signed 1 bit immediate for short format binary insns" (m32c-isa)
1956 h-sint DFLT f-imm1-S
1957 ((parse "imm1_S")) () ()
1958)
1959(define-full-operand Imm3-S "signed 3 bit immediate for short format binary insns" (m32c-isa)
1960 h-sint DFLT f-imm3-S
1961 ((parse "imm3_S")) () ()
1962)
1963
1964;-------------------------------------------------------------
1965; Bit numbers
1966;-------------------------------------------------------------
1967
1968(define-full-operand Bitno16R "bit number for indexing registers" (m16c-isa)
1969 h-uint DFLT f-dsp-16-u8
1970 ((parse "Bitno16R")) () ()
1971)
1972(dnop Bitno32Prefixed "bit number for indexing objects" (m32c-isa) h-uint f-bitno32-prefixed)
1973(dnop Bitno32Unprefixed "bit number for indexing objects" (m32c-isa) h-uint f-bitno32-unprefixed)
1974
1975(define-full-operand BitBase16-16-u8 "unsigned bit,base:8 at offset 16for m16c" (m16c-isa)
1976 h-uint DFLT f-dsp-16-u8
1977 ((parse "unsigned_bitbase8") (print "unsigned_bitbase")) () ()
1978)
1979(define-full-operand BitBase16-16-s8 "signed bit,base:8 at offset 16for m16c" (m16c-isa)
1980 h-uint DFLT f-dsp-16-s8
1981 ((parse "signed_bitbase8") (print "signed_bitbase")) () ()
1982)
1983(define-full-operand BitBase16-16-u16 "unsigned bit,base:16 at offset 16 for m16c" (m16c-isa)
1984 h-uint DFLT f-dsp-16-u16
1985 ((parse "unsigned_bitbase16") (print "unsigned_bitbase")) () ()
1986)
1987(define-full-operand BitBase16-8-u11-S "signed bit,base:11 at offset 16 for m16c" (m16c-isa)
1988 h-sint DFLT f-bitbase16-u11-S
1989 ((parse "unsigned_bitbase11") (print "unsigned_bitbase")) () ()
1990)
1991
1992(define-full-operand BitBase32-16-u11-Unprefixed "unsigned bit,base:11 at offset 16 for m32c" (m32c-isa)
1993 h-uint DFLT f-bitbase32-16-u11-unprefixed
1994 ((parse "unsigned_bitbase11") (print "unsigned_bitbase")) () ()
1995)
1996(define-full-operand BitBase32-16-s11-Unprefixed "signed bit,base:11 at offset 16 for m32c" (m32c-isa)
1997 h-sint DFLT f-bitbase32-16-s11-unprefixed
1998 ((parse "signed_bitbase11") (print "signed_bitbase")) () ()
1999)
2000(define-full-operand BitBase32-16-u19-Unprefixed "unsigned bit,base:19 at offset 16 for m32c" (m32c-isa)
2001 h-uint DFLT f-bitbase32-16-u19-unprefixed
2002 ((parse "unsigned_bitbase19") (print "unsigned_bitbase")) () ()
2003)
2004(define-full-operand BitBase32-16-s19-Unprefixed "signed bit,base:19 at offset 16 for m32c" (m32c-isa)
2005 h-sint DFLT f-bitbase32-16-s19-unprefixed
2006 ((parse "signed_bitbase19") (print "signed_bitbase")) () ()
2007)
2008(define-full-operand BitBase32-16-u27-Unprefixed "unsigned bit,base:27 at offset 16 for m32c" (m32c-isa)
2009 h-uint DFLT f-bitbase32-16-u27-unprefixed
2010 ((parse "unsigned_bitbase27") (print "unsigned_bitbase")) () ()
2011)
2012(define-full-operand BitBase32-24-u11-Prefixed "unsigned bit,base:11 at offset 24 for m32c" (m32c-isa)
2013 h-uint DFLT f-bitbase32-24-u11-prefixed
2014 ((parse "unsigned_bitbase11") (print "unsigned_bitbase")) () ()
2015)
2016(define-full-operand BitBase32-24-s11-Prefixed "signed bit,base:11 at offset 24 for m32c" (m32c-isa)
2017 h-sint DFLT f-bitbase32-24-s11-prefixed
2018 ((parse "signed_bitbase11") (print "signed_bitbase")) () ()
2019)
2020(define-full-operand BitBase32-24-u19-Prefixed "unsigned bit,base:19 at offset 24 for m32c" (m32c-isa)
2021 h-uint DFLT f-bitbase32-24-u19-prefixed
2022 ((parse "unsigned_bitbase19") (print "unsigned_bitbase")) () ()
2023)
2024(define-full-operand BitBase32-24-s19-Prefixed "signed bit,base:19 at offset 24 for m32c" (m32c-isa)
2025 h-sint DFLT f-bitbase32-24-s19-prefixed
2026 ((parse "signed_bitbase19") (print "signed_bitbase")) () ()
2027)
2028(define-full-operand BitBase32-24-u27-Prefixed "unsigned bit,base:27 at offset 24 for m32c" (m32c-isa)
2029 h-uint DFLT f-bitbase32-24-u27-prefixed
2030 ((parse "unsigned_bitbase27") (print "unsigned_bitbase")) () ()
2031)
2032;-------------------------------------------------------------
2033; Labels
2034;-------------------------------------------------------------
2035
2036(dnop Lab-5-3 "3 bit label" (all-isas) h-iaddr f-lab-5-3)
2037(dnop Lab32-jmp-s "3 bit label" (all-isas) h-iaddr f-lab32-jmp-s)
2038(dnop Lab-8-8 "8 bit label" (all-isas) h-iaddr f-lab-8-8)
2039(dnop Lab-8-16 "16 bit label" (all-isas) h-iaddr f-lab-8-16)
2040(dnop Lab-8-24 "24 bit label" (all-isas) h-iaddr f-lab-8-24)
2041(dnop Lab-16-8 "8 bit label" (all-isas) h-iaddr f-lab-16-8)
2042(dnop Lab-24-8 "8 bit label" (all-isas) h-iaddr f-lab-24-8)
2043(dnop Lab-32-8 "8 bit label" (all-isas) h-iaddr f-lab-32-8)
2044(dnop Lab-40-8 "8 bit label" (all-isas) h-iaddr f-lab-40-8)
2045
2046;-------------------------------------------------------------
2047; Condition code bits
2048;-------------------------------------------------------------
2049
2050(dnop sbit "negative bit" (SEM-ONLY all-isas) h-sbit f-nil)
2051(dnop obit "overflow bit" (SEM-ONLY all-isas) h-obit f-nil)
2052(dnop zbit "zero bit" (SEM-ONLY all-isas) h-zbit f-nil)
2053(dnop cbit "carry bit" (SEM-ONLY all-isas) h-cbit f-nil)
2054(dnop ubit "stack ptr select bit" (SEM-ONLY all-isas) h-ubit f-nil)
2055(dnop ibit "interrupt enable bit" (SEM-ONLY all-isas) h-ibit f-nil)
2056(dnop bbit "reg bank select bit" (SEM-ONLY all-isas) h-bbit f-nil)
2057(dnop dbit "debug bit" (SEM-ONLY all-isas) h-dbit f-nil)
2058
2059;-------------------------------------------------------------
2060; Condition operands
2061;-------------------------------------------------------------
2062
2063(define-pmacro (cond-operand mach offset)
2064 (dnop (.sym cond mach - offset) "condition" ((.sym m mach c-isa)) (.sym h-cond mach) (.sym f-dsp- offset -u8))
2065)
2066
2067(cond-operand 16 16)
2068(cond-operand 16 24)
2069(cond-operand 16 32)
2070(cond-operand 32 16)
2071(cond-operand 32 24)
2072(cond-operand 32 32)
2073(cond-operand 32 40)
2074
2075(dnop cond16c "condition" (m16c-isa) h-cond16c f-cond16)
2076(dnop cond16j "condition" (m16c-isa) h-cond16j f-cond16)
2077(dnop cond16j5 "condition" (m16c-isa) h-cond16j-5 f-cond16j-5)
2078(dnop cond32 "condition" (m32c-isa) h-cond32 f-cond32)
2079(dnop cond32j "condition" (m32c-isa) h-cond32 f-cond32j)
2080(dnop sccond32 "scCND condition" (m32c-isa) h-cond32 f-cond16)
2081(dnop flags16 "flags" (m16c-isa) h-flags f-9-3)
2082(dnop flags32 "flags" (m32c-isa) h-flags f-13-3)
2083(dnop cr16 "control" (m16c-isa) h-cr-16 f-9-3)
2084(dnop cr1-Unprefixed-32 "control" (m32c-isa) h-cr1-32 f-13-3)
2085(dnop cr1-Prefixed-32 "control" (m32c-isa) h-cr1-32 f-21-3)
2086(dnop cr2-32 "control" (m32c-isa) h-cr2-32 f-13-3)
2087(dnop cr3-Unprefixed-32 "control" (m32c-isa) h-cr3-32 f-13-3)
2088(dnop cr3-Prefixed-32 "control" (m32c-isa) h-cr3-32 f-21-3)
2089
2090;-------------------------------------------------------------
2091; Suffixes
2092;-------------------------------------------------------------
2093
2094(define-full-operand Z "Suffix for zero format insns" (all-isas)
2095 h-sint DFLT f-nil
2096 ((parse "Z") (print "Z")) () ()
2097)
2098(define-full-operand S "Suffix for short format insns" (all-isas)
2099 h-sint DFLT f-nil
2100 ((parse "S") (print "S")) () ()
2101)
2102(define-full-operand Q "Suffix for quick format insns" (all-isas)
2103 h-sint DFLT f-nil
2104 ((parse "Q") (print "Q")) () ()
2105)
2106(define-full-operand G "Suffix for general format insns" (all-isas)
2107 h-sint DFLT f-nil
2108 ((parse "G") (print "G")) () ()
2109)
2110(define-full-operand X "Empty suffix" (all-isas)
2111 h-sint DFLT f-nil
2112 ((parse "X") (print "X")) () ()
2113)
2114(define-full-operand size "any size specifier" (all-isas)
2115 h-sint DFLT f-nil
2116 ((parse "size") (print "size")) () ()
2117)
2118;-------------------------------------------------------------
2119; Misc
2120;-------------------------------------------------------------
2121
2122(dnop BitIndex "Bit Index for the next insn" (SEM-ONLY MACH32 m32c-isa) h-bit-index f-nil)
2123(dnop SrcIndex "Source Index for the next insn" (SEM-ONLY MACH32 m32c-isa) h-src-index f-nil)
2124(dnop DstIndex "Destination Index for the next insn" (SEM-ONLY MACH32 m32c-isa) h-dst-index f-nil)
2125(dnop NoRemainder "Place holder for when the remainder is not kept" (SEM-ONLY MACH32 m32c-isa) h-none f-nil)
2126\f
2127;=============================================================
2128; Derived Operands
2129
2130; Memory reference macros that clip addresses appropriately. Refer to
2131; memory at ADDRESS in MODE, clipped appropriately for either the m16c
2132; or m32c.
2133(define-pmacro (mem16 mode address)
2134 (mem mode (and #xffff address)))
2135
2136(define-pmacro (mem32 mode address)
2137 (mem mode (and #xffffff address)))
2138
2139; Like mem16 and mem32, but takes MACH as a parameter. MACH must be
2140; either 16 or 32.
2141(define-pmacro (mem-mach mach mode address)
2142 ((.sym mem mach) mode address))
2143
2144;-------------------------------------------------------------
2145; Source
2146;-------------------------------------------------------------
2147; Rn direct
2148;-------------------------------------------------------------
2149
2150(define-pmacro (src16-Rn-direct-operand xmode)
2151 (begin
2152 (define-derived-operand
2153 (name (.sym src16-Rn-direct- xmode))
2154 (comment (.str "m16c Rn direct source " xmode))
2155 (attrs (machine 16))
2156 (mode xmode)
2157 (args ((.sym Src16Rn xmode)))
2158 (syntax (.str "$Src16Rn" xmode))
2159 (base-ifield f-8-4)
2160 (encoding (+ (f-8-2 0) (.sym Src16Rn xmode)))
2161 (ifield-assertion (eq f-8-2 0))
2162 (getter (trunc xmode (.sym Src16Rn xmode)))
2163 (setter (set (.sym Src16Rn xmode) newval))
2164 )
2165 )
2166)
2167(src16-Rn-direct-operand QI)
2168(src16-Rn-direct-operand HI)
2169
2170(define-pmacro (src32-Rn-direct-operand group base xmode)
2171 (begin
2172 (define-derived-operand
2173 (name (.sym src32-Rn-direct- group - xmode))
2174 (comment (.str "m32c Rn direct source " xmode))
2175 (attrs (machine 32))
2176 (mode xmode)
2177 (args ((.sym Src32Rn group xmode)))
2178 (syntax (.str "$Src32Rn" group xmode))
2179 (base-ifield (.sym f- base -11))
2180 (encoding (+ ((.sym f- base -3) 4) (.sym Src32Rn group xmode)))
2181 (ifield-assertion (eq (.sym f- base -3) 4))
2182 (getter (trunc xmode (.sym Src32Rn group xmode)))
2183 (setter (set (.sym Src32Rn group xmode) newval))
2184 )
2185 )
2186)
2187
2188(src32-Rn-direct-operand Unprefixed 1 QI)
2189(src32-Rn-direct-operand Prefixed 9 QI)
2190(src32-Rn-direct-operand Unprefixed 1 HI)
2191(src32-Rn-direct-operand Prefixed 9 HI)
2192(src32-Rn-direct-operand Unprefixed 1 SI)
2193(src32-Rn-direct-operand Prefixed 9 SI)
2194
2195;-------------------------------------------------------------
2196; An direct
2197;-------------------------------------------------------------
2198
2199(define-pmacro (src16-An-direct-operand xmode)
2200 (begin
2201 (define-derived-operand
2202 (name (.sym src16-An-direct- xmode))
2203 (comment (.str "m16c An direct destination " xmode))
2204 (attrs (machine 16))
2205 (mode xmode)
2206 (args ((.sym Src16An xmode)))
2207 (syntax (.str "$Src16An" xmode))
2208 (base-ifield f-8-4)
2209 (encoding (+ (f-8-2 1) (f-10-1 0) (.sym Src16An xmode)))
2210 (ifield-assertion (andif (eq f-8-2 1) (eq f-10-1 0)))
2211 (getter (trunc xmode (.sym Src16An xmode)))
2212 (setter (set (.sym Src16An xmode) newval))
2213 )
2214 )
2215)
2216(src16-An-direct-operand QI)
2217(src16-An-direct-operand HI)
2218
2219(define-pmacro (src32-An-direct-operand group base1 base2 xmode)
2220 (begin
2221 (define-derived-operand
2222 (name (.sym src32-An-direct- group - xmode))
2223 (comment (.str "m32c An direct destination " xmode))
2224 (attrs (machine 32))
2225 (mode xmode)
2226 (args ((.sym Src32An group xmode)))
2227 (syntax (.str "$Src32An" group xmode))
2228 (base-ifield (.sym f- base1 -11))
2229 (encoding (+ ((.sym f- base1 -3) 0) ((.sym f- base2 -1) 1) (.sym Src32An group xmode)))
2230 (ifield-assertion (andif (eq (.sym f- base1 -3) 0) (eq (.sym f- base2 -1) 1)))
2231 (getter (trunc xmode (.sym Src32An group xmode)))
2232 (setter (set (.sym Src32An group xmode) newval))
2233 )
2234 )
2235)
2236
2237(src32-An-direct-operand Unprefixed 1 10 QI)
2238(src32-An-direct-operand Unprefixed 1 10 HI)
2239(src32-An-direct-operand Unprefixed 1 10 SI)
2240(src32-An-direct-operand Prefixed 9 18 QI)
2241(src32-An-direct-operand Prefixed 9 18 HI)
2242(src32-An-direct-operand Prefixed 9 18 SI)
2243
2244;-------------------------------------------------------------
2245; An indirect
2246;-------------------------------------------------------------
2247
2248(define-pmacro (src16-An-indirect-operand xmode)
2249 (begin
2250 (define-derived-operand
2251 (name (.sym src16-An-indirect- xmode))
2252 (comment (.str "m16c An indirect destination " xmode))
2253 (attrs (machine 16))
2254 (mode xmode)
2255 (args (Src16An))
2256 (syntax "[$Src16An]")
2257 (base-ifield f-8-4)
2258 (encoding (+ (f-8-2 1) (f-10-1 1) Src16An))
2259 (ifield-assertion (andif (eq f-8-2 1) (eq f-10-1 1)))
2260 (getter (mem16 xmode Src16An))
2261 (setter (set (mem16 xmode Src16An) newval))
2262 )
2263 )
2264)
2265(src16-An-indirect-operand QI)
2266(src16-An-indirect-operand HI)
2267
2268(define-pmacro (src32-An-indirect-operand group base1 base2 xmode)
2269 (begin
2270 (define-derived-operand
2271 (name (.sym src32-An-indirect- group - xmode))
2272 (comment (.str "m32c An indirect destination " xmode))
2273 (attrs (machine 32))
2274 (mode xmode)
2275 (args ((.sym Src32An group)))
2276 (syntax (.str "[$Src32An" group "]"))
2277 (base-ifield (.sym f- base1 -11))
2278 (encoding (+ ((.sym f- base1 -3) 0) ((.sym f- base2 -1) 0) (.sym Src32An group)))
2279 (ifield-assertion (andif (eq (.sym f- base1 -3) 0) (eq (.sym f- base2 -1) 0)))
2280 (getter (c-call xmode (.str "operand_getter_" xmode) (.sym Src32An group)
2281 (const 0)))
2282 (setter (c-call DFLT (.str "operand_setter_" xmode) newval
2283 (.sym Src32An group) (const 0)))
2284; (getter (mem32 xmode (.sym Src32An group)))
2285; (setter (set (mem32 xmode (.sym Src32An group)) newval))
2286 )
2287 )
2288)
2289
2290(src32-An-indirect-operand Unprefixed 1 10 QI)
2291(src32-An-indirect-operand Unprefixed 1 10 HI)
2292(src32-An-indirect-operand Unprefixed 1 10 SI)
2293(src32-An-indirect-operand Prefixed 9 18 QI)
2294(src32-An-indirect-operand Prefixed 9 18 HI)
2295(src32-An-indirect-operand Prefixed 9 18 SI)
2296
2297;-------------------------------------------------------------
2298; dsp:d[r] relative
2299;-------------------------------------------------------------
2300
2301(define-pmacro (src16-relative-operand xmode)
2302 (begin
2303 (define-derived-operand
2304 (name (.sym src16-16-8-SB-relative- xmode))
2305 (comment (.str "m16c dsp:8[sb] relative destination " xmode))
2306 (attrs (machine 16))
2307 (mode xmode)
2308 (args (Dsp-16-u8))
2309 (syntax "${Dsp-16-u8}[sb]")
2310 (base-ifield f-8-4)
2311 (encoding (+ (f-8-4 #xA) Dsp-16-u8))
2312 (ifield-assertion (eq f-8-4 #xA))
2313 (getter (mem16 xmode (add Dsp-16-u8 (reg h-sb))))
2314 (setter (set (mem16 xmode (add Dsp-16-u8 (reg h-sb))) newval))
2315 )
2316 (define-derived-operand
2317 (name (.sym src16-16-16-SB-relative- xmode))
2318 (comment (.str "m16c dsp:16[sb] relative destination " xmode))
2319 (attrs (machine 16))
2320 (mode xmode)
2321 (args (Dsp-16-u16))
2322 (syntax "${Dsp-16-u16}[sb]")
2323 (base-ifield f-8-4)
2324 (encoding (+ (f-8-4 #xE) Dsp-16-u16))
2325 (ifield-assertion (eq f-8-4 #xE))
2326 (getter (mem16 xmode (add Dsp-16-u16 (reg h-sb))))
2327 (setter (set (mem16 xmode (add Dsp-16-u16 (reg h-sb))) newval))
2328 )
2329 (define-derived-operand
2330 (name (.sym src16-16-8-FB-relative- xmode))
2331 (comment (.str "m16c dsp:8[fb] relative destination " xmode))
2332 (attrs (machine 16))
2333 (mode xmode)
2334 (args (Dsp-16-s8))
2335 (syntax "${Dsp-16-s8}[fb]")
2336 (base-ifield f-8-4)
2337 (encoding (+ (f-8-4 #xB) Dsp-16-s8))
2338 (ifield-assertion (eq f-8-4 #xB))
2339 (getter (mem16 xmode (add Dsp-16-s8 (reg h-fb))))
2340 (setter (set (mem16 xmode (add Dsp-16-s8 (reg h-fb))) newval))
2341 )
2342 (define-derived-operand
2343 (name (.sym src16-16-8-An-relative- xmode))
2344 (comment (.str "m16c dsp:8[An] relative destination " xmode))
2345 (attrs (machine 16))
2346 (mode xmode)
2347 (args (Src16An Dsp-16-u8))
2348 (syntax "${Dsp-16-u8}[$Src16An]")
2349 (base-ifield f-8-4)
2350 (encoding (+ (f-8-2 2) (f-10-1 0) Dsp-16-u8 Src16An))
2351 (ifield-assertion (andif (eq f-8-2 2) (eq f-10-1 0)))
2352 (getter (mem16 xmode (add Dsp-16-u8 Src16An)))
2353 (setter (set (mem16 xmode (add Dsp-16-u8 Src16An)) newval))
2354 )
2355 (define-derived-operand
2356 (name (.sym src16-16-16-An-relative- xmode))
2357 (comment (.str "m16c dsp:16[An] relative destination " xmode))
2358 (attrs (machine 16))
2359 (mode xmode)
2360 (args (Src16An Dsp-16-u16))
2361 (syntax "${Dsp-16-u16}[$Src16An]")
2362 (base-ifield f-8-4)
2363 (encoding (+ (f-8-2 3) (f-10-1 0) Dsp-16-u16 Src16An))
2364 (ifield-assertion (andif (eq f-8-2 3) (eq f-10-1 0)))
2365 (getter (mem16 xmode (add Dsp-16-u16 Src16An)))
2366 (setter (set (mem16 xmode (add Dsp-16-u16 Src16An)) newval))
2367 )
2368 )
2369)
2370
2371(src16-relative-operand QI)
2372(src16-relative-operand HI)
2373
2374(define-pmacro (src32-relative-operand offset group base1 base2 xmode)
2375 (begin
2376 (define-derived-operand
2377 (name (.sym src32- offset -8-SB-relative- group - xmode))
2378 (comment (.str "m32c dsp:8[sb] relative destination " xmode))
2379 (attrs (machine 32))
2380 (mode xmode)
2381 (args ((.sym Dsp- offset -u8)))
2382 (syntax (.str "${Dsp-" offset "-u8}[sb]"))
2383 (base-ifield (.sym f- base1 -11))
2384 (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u8)))
2385 (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -2) 2)))
2386 (getter (c-call xmode (.str "operand_getter_" xmode) sb (.sym Dsp- offset -u8)))
2387 (setter (c-call DFLT (.str "operand_setter_" xmode) newval sb (.sym Dsp- offset -u8)))
2388; (getter (mem32 xmode (add (.sym Dsp- offset -u8) (reg h-sb))))
2389; (setter (set (mem32 xmode (add (.sym Dsp- offset -u8) (reg h-sb))) newval))
2390 )
2391 (define-derived-operand
2392 (name (.sym src32- offset -16-SB-relative- group - xmode))
2393 (comment (.str "m32c dsp:16[sb] relative destination " xmode))
2394 (attrs (machine 32))
2395 (mode xmode)
2396 (args ((.sym Dsp- offset -u16)))
2397 (syntax (.str "${Dsp-" offset "-u16}[sb]"))
2398 (base-ifield (.sym f- base1 -11))
2399 (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u16)))
2400 (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -2) 2)))
2401 (getter (c-call xmode (.str "operand_getter_" xmode) sb (.sym Dsp- offset -u16)))
2402 (setter (c-call DFLT (.str "operand_setter_" xmode) newval sb (.sym Dsp- offset -u16)))
2403; (getter (mem32 xmode (add (.sym Dsp- offset -u16) (reg h-sb))))
2404; (setter (set (mem32 xmode (add (.sym Dsp- offset -u16) (reg h-sb))) newval))
2405 )
2406 (define-derived-operand
2407 (name (.sym src32- offset -8-FB-relative- group - xmode))
2408 (comment (.str "m32c dsp:8[fb] relative destination " xmode))
2409 (attrs (machine 32))
2410 (mode xmode)
2411 (args ((.sym Dsp- offset -s8)))
2412 (syntax (.str "${Dsp-" offset "-s8}[fb]"))
2413 (base-ifield (.sym f- base1 -11))
2414 (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -2) 3) (.sym Dsp- offset -s8)))
2415 (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -2) 3)))
2416 (getter (c-call xmode (.str "operand_getter_" xmode) fb (.sym Dsp- offset -s8)))
2417 (setter (c-call DFLT (.str "operand_setter_" xmode) newval fb (.sym Dsp- offset -s8)))
2418; (getter (mem32 xmode (add (.sym Dsp- offset -s8) (reg h-fb))))
2419; (setter (set (mem32 xmode (add (.sym Dsp- offset -s8) (reg h-fb))) newval))
2420 )
2421 (define-derived-operand
2422 (name (.sym src32- offset -16-FB-relative- group - xmode))
2423 (comment (.str "m32c dsp:16[fb] relative destination " xmode))
2424 (attrs (machine 32))
2425 (mode xmode)
2426 (args ((.sym Dsp- offset -s16)))
2427 (syntax (.str "${Dsp-" offset "-s16}[fb]"))
2428 (base-ifield (.sym f- base1 -11))
2429 (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -2) 3) (.sym Dsp- offset -s16)))
2430 (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -2) 3)))
2431 (getter (c-call xmode (.str "operand_getter_" xmode) fb (.sym Dsp- offset -s16)))
2432 (setter (c-call DFLT (.str "operand_setter_" xmode) newval fb (.sym Dsp- offset -s16)))
2433; (getter (mem32 xmode (add (.sym Dsp- offset -s16) (reg h-fb))))
2434; (setter (set (mem32 xmode (add (.sym Dsp- offset -s16) (reg h-fb))) newval))
2435 )
2436 (define-derived-operand
2437 (name (.sym src32- offset -8-An-relative- group - xmode))
2438 (comment (.str "m32c dsp:8[An] relative destination " xmode))
2439 (attrs (machine 32))
2440 (mode xmode)
2441 (args ((.sym Src32An group) (.sym Dsp- offset -u8)))
2442 (syntax (.str "${Dsp-" offset "-u8}[$Src32An" group "]"))
2443 (base-ifield (.sym f- base1 -11))
2444 (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -1) 0) (.sym Dsp- offset -u8) (.sym Src32An group)))
2445 (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -1) 0)))
2446 (getter (c-call xmode (.str "operand_getter_" xmode) (.sym Src32An group) (.sym Dsp- offset -u8)))
2447 (setter (c-call DFLT (.str "operand_setter_" xmode) newval (.sym Src32An group) (.sym Dsp- offset -u8)))
2448; (getter (mem32 xmode (add (.sym Dsp- offset -u8) (.sym Src32An group))))
2449; (setter (set (mem32 xmode (add (.sym Dsp- offset -u8) (.sym Src32An group))) newval))
2450 )
2451 (define-derived-operand
2452 (name (.sym src32- offset -16-An-relative- group - xmode))
2453 (comment (.str "m32c dsp:16[An] relative destination " xmode))
2454 (attrs (machine 32))
2455 (mode xmode)
2456 (args ((.sym Src32An group) (.sym Dsp- offset -u16)))
2457 (syntax (.str "${Dsp-" offset "-u16}[$Src32An" group "]"))
2458 (base-ifield (.sym f- base1 -11))
2459 (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -1) 0) (.sym Dsp- offset -u16) (.sym Src32An group)))
2460 (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -1) 0)))
2461 (getter (c-call xmode (.str "operand_getter_" xmode) (.sym Src32An group) (.sym Dsp- offset -u16)))
2462 (setter (c-call DFLT (.str "operand_setter_" xmode) newval (.sym Src32An group) (.sym Dsp- offset -u16)))
2463; (getter (mem32 xmode (add (.sym Dsp- offset -u16) (.sym Src32An group))))
2464; (setter (set (mem32 xmode (add (.sym Dsp- offset -u16) (.sym Src32An group))) newval))
2465 )
2466 (define-derived-operand
2467 (name (.sym src32- offset -24-An-relative- group - xmode))
2468 (comment (.str "m32c dsp:16[An] relative destination " xmode))
2469 (attrs (machine 32))
2470 (mode xmode)
2471 (args ((.sym Src32An group) (.sym Dsp- offset -u24)))
2472 (syntax (.str "${Dsp-" offset "-u24}[$Src32An" group "]"))
2473 (base-ifield (.sym f- base1 -11))
2474 (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -1) 0) (.sym Dsp- offset -u24) (.sym Src32An group)))
2475 (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -1) 0)))
2476 (getter (c-call xmode (.str "operand_getter_" xmode) (.sym Src32An group) (.sym Dsp- offset -u24) ))
2477 (setter (c-call DFLT (.str "operand_setter_" xmode) newval (.sym Src32An group) (.sym Dsp- offset -u24)))
2478; (getter (mem32 xmode (add (.sym Dsp- offset -u24) (.sym Src32An group))))
2479; (setter (set (mem32 xmode (add (.sym Dsp- offset -u24) (.sym Src32An group))) newval))
2480 )
2481 )
2482)
2483
2484(src32-relative-operand 16 Unprefixed 1 10 QI)
2485(src32-relative-operand 16 Unprefixed 1 10 HI)
2486(src32-relative-operand 16 Unprefixed 1 10 SI)
2487(src32-relative-operand 24 Prefixed 9 18 QI)
2488(src32-relative-operand 24 Prefixed 9 18 HI)
2489(src32-relative-operand 24 Prefixed 9 18 SI)
2490
2491;-------------------------------------------------------------
2492; Absolute address
2493;-------------------------------------------------------------
2494
2495(define-pmacro (src16-absolute xmode)
2496 (begin
2497 (define-derived-operand
2498 (name (.sym src16-16-16-absolute- xmode))
2499 (comment (.str "m16c absolute address " xmode))
2500 (attrs (machine 16))
2501 (mode xmode)
2502 (args (Dsp-16-u16))
2503 (syntax (.str "${Dsp-16-u16}"))
2504 (base-ifield f-8-4)
2505 (encoding (+ (f-8-4 #xF) Dsp-16-u16))
2506 (ifield-assertion (eq f-8-4 #xF))
2507 (getter (mem16 xmode Dsp-16-u16))
2508 (setter (set (mem16 xmode Dsp-16-u16) newval))
2509 )
2510 )
2511)
2512
2513(src16-absolute QI)
2514(src16-absolute HI)
2515
2516(define-pmacro (src32-absolute offset group base1 base2 xmode)
2517 (begin
2518 (define-derived-operand
2519 (name (.sym src32- offset -16-absolute- group - xmode))
2520 (comment (.str "m32c absolute address " xmode))
2521 (attrs (machine 32))
2522 (mode xmode)
2523 (args ((.sym Dsp- offset -u16)))
2524 (syntax (.str "${Dsp-" offset "-u16}"))
2525 (base-ifield (.sym f- base1 -11))
2526 (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 3) (.sym Dsp- offset -u16)))
2527 (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 3)))
2528 (getter (c-call xmode (.str "operand_getter_" xmode) (const 0) (.sym Dsp- offset -u16)))
2529 (setter (c-call DFLT (.str "operand_setter_" xmode) newval (const 0) (.sym Dsp- offset -u16)))
2530; (getter (mem32 xmode (.sym Dsp- offset -u16)))
2531; (setter (set (mem32 xmode (.sym Dsp- offset -u16)) newval))
2532 )
2533 (define-derived-operand
2534 (name (.sym src32- offset -24-absolute- group - xmode))
2535 (comment (.str "m32c absolute address " xmode))
2536 (attrs (machine 32))
2537 (mode xmode)
2538 (args ((.sym Dsp- offset -u24)))
2539 (syntax (.str "${Dsp-" offset "-u24}"))
2540 (base-ifield (.sym f- base1 -11))
2541 (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u24)))
2542 (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 2)))
2543 (getter (c-call xmode (.str "operand_getter_" xmode) (const 0) (.sym Dsp- offset -u24)))
2544 (setter (c-call DFLT (.str "operand_setter_" xmode) newval (const 0) (.sym Dsp- offset -u24)))
2545; (getter (mem32 xmode (.sym Dsp- offset -u24)))
2546; (setter (set (mem32 xmode (.sym Dsp- offset -u24)) newval))
2547 )
2548 )
2549)
2550
2551(src32-absolute 16 Unprefixed 1 10 QI)
2552(src32-absolute 16 Unprefixed 1 10 HI)
2553(src32-absolute 16 Unprefixed 1 10 SI)
2554(src32-absolute 24 Prefixed 9 18 QI)
2555(src32-absolute 24 Prefixed 9 18 HI)
2556(src32-absolute 24 Prefixed 9 18 SI)
2557
2558;-------------------------------------------------------------
2559; An indirect indirect
2560;
2561; Double indirect addressing uses the lower 3 bytes of the value stored
2562; at the address referenced by 'op' as the effective address.
2563;-------------------------------------------------------------
2564
2565(define-pmacro (indirect-addr op) (and USI (mem32 USI op) #x00ffffff))
2566
2567; (define-pmacro (src-An-indirect-indirect-operand xmode)
2568; (define-derived-operand
2569; (name (.sym src32-An-indirect-indirect- xmode))
2570; (comment (.str "m32c An indirect indirect destination " xmode))
2571; (attrs (machine 32))
2572; (mode xmode)
2573; (args (Src32AnPrefixed))
2574; (syntax (.str "[[$Src32AnPrefixed]]"))
2575; (base-ifield f-9-11)
2576; (encoding (+ (f-9-3 0) (f-18-1 0) Src32AnPrefixed))
2577; (ifield-assertion (andif (eq f-9-3 0) (eq f-18-1 0)))
2578; (getter (mem32 xmode (indirect-addr Src32AnPrefixed)))
2579; (setter (set (mem32 xmode (indirect-addr Src32AnPrefixed)) newval))
2580; )
2581; )
2582
2583; (src-An-indirect-indirect-operand QI)
2584; (src-An-indirect-indirect-operand HI)
2585; (src-An-indirect-indirect-operand SI)
2586
2587;-------------------------------------------------------------
2588; Relative indirect
2589;-------------------------------------------------------------
2590
2591(define-pmacro (src-relative-indirect-operand xmode)
2592 (begin
2593; (define-derived-operand
2594; (name (.sym src32-24-8-SB-relative-indirect- xmode))
2595; (comment (.str "m32c dsp:8[sb] relative source " xmode))
2596; (attrs (machine 32))
2597; (mode xmode)
2598; (args (Dsp-24-u8))
2599; (syntax "[${Dsp-24-u8}[sb]]")
2600; (base-ifield f-9-11)
2601; (encoding (+ (f-9-3 1) (f-18-2 2) Dsp-24-u8))
2602; (ifield-assertion (andif (eq f-9-3 1) (eq f-18-2 2)))
2603; (getter (mem32 xmode (indirect-addr (add Dsp-24-u8 (reg h-sb)))))
2604; (setter (set (mem32 xmode (indirect-addr (add Dsp-24-u8 (reg h-sb)))) newval))
2605; )
2606; (define-derived-operand
2607; (name (.sym src32-24-16-SB-relative-indirect- xmode))
2608; (comment (.str "m32c dsp:16[sb] relative source " xmode))
2609; (attrs (machine 32))
2610; (mode xmode)
2611; (args (Dsp-24-u16))
2612; (syntax "[${Dsp-24-u16}[sb]]")
2613; (base-ifield f-9-11)
2614; (encoding (+ (f-9-3 2) (f-18-2 2) Dsp-24-u16))
2615; (ifield-assertion (andif (eq f-9-3 2) (eq f-18-2 2)))
2616; (getter (mem32 xmode (indirect-addr (add Dsp-24-u16 (reg h-sb)))))
2617; (setter (set (mem32 xmode (indirect-addr (add Dsp-24-u16 (reg h-sb)))) newval))
2618; )
2619; (define-derived-operand
2620; (name (.sym src32-24-8-FB-relative-indirect- xmode))
2621; (comment (.str "m32c dsp:8[fb] relative source " xmode))
2622; (attrs (machine 32))
2623; (mode xmode)
2624; (args (Dsp-24-s8))
2625; (syntax "[${Dsp-24-s8}[fb]]")
2626; (base-ifield f-9-11)
2627; (encoding (+ (f-9-3 1) (f-18-2 3) Dsp-24-s8))
2628; (ifield-assertion (andif (eq f-9-3 1) (eq f-18-2 3)))
2629; (getter (mem32 xmode (indirect-addr (add Dsp-24-s8 (reg h-fb)))))
2630; (setter (set (mem32 xmode (indirect-addr (add Dsp-24-s8 (reg h-fb)))) newval))
2631; )
2632; (define-derived-operand
2633; (name (.sym src32-24-16-FB-relative-indirect- xmode))
2634; (comment (.str "m32c dsp:16[fb] relative source " xmode))
2635; (attrs (machine 32))
2636; (mode xmode)
2637; (args (Dsp-24-s16))
2638; (syntax "[${Dsp-24-s16}[fb]]")
2639; (base-ifield f-9-11)
2640; (encoding (+ (f-9-3 2) (f-18-2 3) Dsp-24-s16))
2641; (ifield-assertion (andif (eq f-9-3 2) (eq f-18-2 3)))
2642; (getter (mem32 xmode (indirect-addr (add Dsp-24-s16 (reg h-fb)))))
2643; (setter (set (mem32 xmode (indirect-addr (add Dsp-24-s16 (reg h-fb)))) newval))
2644; )
2645; (define-derived-operand
2646; (name (.sym src32-24-8-An-relative-indirect- xmode))
2647; (comment (.str "m32c dsp:8[An] relative indirect source " xmode))
2648; (attrs (machine 32))
2649; (mode xmode)
2650; (args (Src32AnPrefixed Dsp-24-u8))
2651; (syntax "[${Dsp-24-u8}[$Src32AnPrefixed]]")
2652; (base-ifield f-9-11)
2653; (encoding (+ (f-9-3 1) (f-18-1 0) Dsp-24-u8 Src32AnPrefixed))
2654; (ifield-assertion (andif (eq f-9-3 1) (eq f-18-1 0)))
2655; (getter (mem32 xmode (indirect-addr (add Dsp-24-u8 Src32AnPrefixed))))
2656; (setter (set (mem32 xmode (indirect-addr (add Dsp-24-u8 Src32AnPrefixed))) newval))
2657; )
2658; (define-derived-operand
2659; (name (.sym src32-24-16-An-relative-indirect- xmode))
2660; (comment (.str "m32c dsp:16[An] relative source " xmode))
2661; (attrs (machine 32))
2662; (mode xmode)
2663; (args (Src32AnPrefixed Dsp-24-u16))
2664; (syntax "[${Dsp-24-u16}[$Src32AnPrefixed]]")
2665; (base-ifield f-9-11)
2666; (encoding (+ (f-9-3 2) (f-18-1 0) Dsp-24-u16 Src32AnPrefixed))
2667; (ifield-assertion (andif (eq f-9-3 2) (eq f-18-1 0)))
2668; (getter (mem32 xmode (indirect-addr (add Dsp-24-u16 Src32AnPrefixed))))
2669; (setter (set (mem32 xmode (indirect-addr (add Dsp-24-u16 Src32AnPrefixed))) newval))
2670; )
2671; (define-derived-operand
2672; (name (.sym src32-24-24-An-relative-indirect- xmode))
2673; (comment (.str "m32c dsp:24[An] relative source " xmode))
2674; (attrs (machine 32))
2675; (mode xmode)
2676; (args (Src32AnPrefixed Dsp-24-u24))
2677; (syntax "[${Dsp-24-u24}[$Src32AnPrefixed]]")
2678; (base-ifield f-9-11)
2679; (encoding (+ (f-9-3 3) (f-18-1 0) Dsp-24-u24 Src32AnPrefixed))
2680; (ifield-assertion (andif (eq f-9-3 3) (eq f-18-1 0)))
2681; (getter (mem32 xmode (indirect-addr (add Dsp-24-u24 Src32AnPrefixed))))
2682; (setter (set (mem32 xmode (indirect-addr (add Dsp-24-u24 Src32AnPrefixed))) newval))
2683; )
2684 )
2685)
2686
2687; (src-relative-indirect-operand QI)
2688; (src-relative-indirect-operand HI)
2689; (src-relative-indirect-operand SI)
2690
2691;-------------------------------------------------------------
2692; Absolute Indirect address
2693;-------------------------------------------------------------
2694
2695(define-pmacro (src32-absolute-indirect offset base1 base2 xmode)
2696 (begin
2697; (define-derived-operand
2698; (name (.sym src32- offset -16-absolute-indirect-derived- xmode))
2699; (comment (.str "m32c absolute indirect address " xmode))
2700; (attrs (machine 32))
2701; (mode xmode)
2702; (args ((.sym Dsp- offset -u16)))
2703; (syntax (.str "[${Dsp-" offset "-u16}]"))
2704; (base-ifield (.sym f- base1 -11))
2705; (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 3) (.sym Dsp- offset -u16)))
2706; (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 3)))
2707; (getter (mem32 xmode (indirect-addr (.sym Dsp- offset -u16))))
2708; (setter (set (mem32 xmode (indirect-addr (.sym Dsp- offset -u16))) newval))
2709; )
2710; (define-derived-operand
2711; (name (.sym src32- offset -24-absolute-indirect-derived- xmode))
2712; (comment (.str "m32c absolute indirect address " xmode))
2713; (attrs (machine 32))
2714; (mode xmode)
2715; (args ((.sym Dsp- offset -u24)))
2716; (syntax (.str "[${Dsp-" offset "-u24}]"))
2717; (base-ifield (.sym f- base1 -11))
2718; (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u24)))
2719; (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 2)))
2720; (getter (mem32 xmode (indirect-addr (.sym Dsp- offset -u24))))
2721; (setter (set (mem32 xmode (indirect-addr (.sym Dsp- offset -u24))) newval))
2722; )
2723 )
2724)
2725
2726(src32-absolute-indirect 24 9 18 QI)
2727(src32-absolute-indirect 24 9 18 HI)
2728(src32-absolute-indirect 24 9 18 SI)
2729
2730;-------------------------------------------------------------
2731; Register relative source operands for short format insns
2732;-------------------------------------------------------------
2733
2734(define-pmacro (src-2-S-operands mach xmode base opc1 opc2 opc3)
2735 (begin
2736 (define-derived-operand
2737 (name (.sym src mach -2-S-8-SB-relative- xmode))
2738 (comment (.str "m" mach "c SB relative address"))
2739 (attrs (machine mach))
2740 (mode xmode)
2741 (args (Dsp-8-u8))
2742 (syntax "${Dsp-8-u8}[sb]")
2743 (base-ifield (.sym f- base -2))
2744 (encoding (+ ((.sym f- base -2) opc1) Dsp-8-u8))
2745 (ifield-assertion (eq (.sym f- base -2) opc1))
2746 (getter (c-call xmode (.str "operand_getter_" xmode) sb Dsp-8-u8))
2747 (setter (c-call DFLT (.str "operand_setter_" xmode) newval sb Dsp-8-u8))
2748; (getter (mem-mach mach xmode (indirect-addr (add (reg h-sb) Dsp-8-u8))))
2749; (setter (set (mem-mach mach xmode (indirect-addr (add (reg h-sb) Dsp-8-u8))) newval))
2750 )
2751 (define-derived-operand
2752 (name (.sym src mach -2-S-8-FB-relative- xmode))
2753 (comment (.str "m" mach "c FB relative address"))
2754 (attrs (machine mach))
2755 (mode xmode)
2756 (args (Dsp-8-s8))
2757 (syntax "${Dsp-8-s8}[fb]")
2758 (base-ifield (.sym f- base -2))
2759 (encoding (+ ((.sym f- base -2) opc2) Dsp-8-s8))
2760 (ifield-assertion (eq (.sym f- base -2) opc2))
2761 (getter (c-call xmode (.str "operand_getter_" xmode) fb Dsp-8-s8))
2762 (setter (c-call DFLT (.str "operand_setter_" xmode) newval fb Dsp-8-s8))
2763; (getter (mem-mach mach xmode (indirect-addr (add (reg h-fb) Dsp-8-s8))))
2764; (setter (set (mem-mach mach xmode (indirect-addr (add (reg h-fb) Dsp-8-s8))) newval))
2765 )
2766 (define-derived-operand
2767 (name (.sym src mach -2-S-16-absolute- xmode))
2768 (comment (.str "m" mach "c absolute address"))
2769 (attrs (machine mach))
2770 (mode xmode)
2771 (args (Dsp-8-u16))
2772 (syntax "${Dsp-8-u16}")
2773 (base-ifield (.sym f- base -2))
2774 (encoding (+ ((.sym f- base -2) opc3) Dsp-8-u16))
2775 (ifield-assertion (eq (.sym f- base -2) opc3))
2776 (getter (c-call xmode (.str "operand_getter_" xmode) (const 0) Dsp-8-u16))
2777 (setter (c-call DFLT (.str "operand_setter_" xmode) newval (const 0) Dsp-8-u16))
2778; (getter (mem-mach mach xmode Dsp-8-u16))
2779; (setter (set (mem-mach mach xmode Dsp-8-u16) newval))
2780 )
2781 )
2782)
2783
2784(src-2-S-operands 16 QI 6 1 2 3)
2785(src-2-S-operands 32 QI 2 2 3 1)
2786(src-2-S-operands 32 HI 2 2 3 1)
2787
2788;=============================================================
2789; Derived Operands
2790;-------------------------------------------------------------
2791; Destination
2792;-------------------------------------------------------------
2793; Rn direct
2794;-------------------------------------------------------------
2795
2796(define-pmacro (dst16-Rn-direct-operand xmode)
2797 (begin
2798 (define-derived-operand
2799 (name (.sym dst16-Rn-direct- xmode))
2800 (comment (.str "m16c Rn direct destination " xmode))
2801 (attrs (machine 16))
2802 (mode xmode)
2803 (args ((.sym Dst16Rn xmode)))
2804 (syntax (.str "$Dst16Rn" xmode))
2805 (base-ifield f-12-4)
2806 (encoding (+ (f-12-2 0) (.sym Dst16Rn xmode)))
2807 (ifield-assertion (eq f-12-2 0))
2808 (getter (trunc xmode (.sym Dst16Rn xmode)))
2809 (setter (set (.sym Dst16Rn xmode) newval))
2810 )
2811 )
2812)
2813
2814(dst16-Rn-direct-operand QI)
2815(dst16-Rn-direct-operand HI)
2816(dst16-Rn-direct-operand SI)
2817
2818(define-derived-operand
2819 (name dst16-Rn-direct-Ext-QI)
2820 (comment "m16c Rn direct destination QI")
2821 (attrs (machine 16))
2822 (mode HI)
2823 (args (Dst16RnExtQI))
2824 (syntax "$Dst16RnExtQI")
2825 (base-ifield f-12-4)
2826 (encoding (+ (f-12-2 0) Dst16RnExtQI (f-15-1 0)))
2827 (ifield-assertion (andif (eq f-12-2 0) (eq f-15-1 0)))
2828 (getter (trunc QI (.sym Dst16RnExtQI)))
2829 (setter (set Dst16RnExtQI newval))
2830)
2831
2832(define-pmacro (dst32-Rn-direct-operand group base xmode)
2833 (begin
2834 (define-derived-operand
2835 (name (.sym dst32-Rn-direct- group - xmode))
2836 (comment (.str "m32c Rn direct destination " xmode))
2837 (attrs (machine 32))
2838 (mode xmode)
2839 (args ((.sym Dst32Rn group xmode)))
2840 (syntax (.str "$Dst32Rn" group xmode))
2841 (base-ifield (.sym f- base -6))
2842 (encoding (+ ((.sym f- base -3) 4) (.sym Dst32Rn group xmode)))
2843 (ifield-assertion (eq (.sym f- base -3) 4))
2844 (getter (trunc xmode (.sym Dst32Rn group xmode)))
2845 (setter (set (.sym Dst32Rn group xmode) newval))
2846 )
2847 )
2848)
2849
2850(dst32-Rn-direct-operand Unprefixed 4 QI)
2851(dst32-Rn-direct-operand Prefixed 12 QI)
2852(dst32-Rn-direct-operand Unprefixed 4 HI)
2853(dst32-Rn-direct-operand Prefixed 12 HI)
2854(dst32-Rn-direct-operand Unprefixed 4 SI)
2855(dst32-Rn-direct-operand Prefixed 12 SI)
2856
2857(define-pmacro (dst32-Rn-direct-Ext-operand group base1 base2 smode dmode)
2858 (begin
2859 (define-derived-operand
2860 (name (.sym dst32-Rn-direct- group - smode))
2861 (comment (.str "m32c Rn direct destination " smode))
2862 (attrs (machine 32))
2863 (mode dmode)
2864 (args ((.sym Dst32Rn group smode)))
2865 (syntax (.str "$Dst32Rn" group smode))
2866 (base-ifield (.sym f- base1 -6))
2867 (encoding (+ ((.sym f- base1 -3) 4) ((.sym f- base2 -1) 1) (.sym Dst32Rn group smode)))
2868 (ifield-assertion (andif (eq (.sym f- base1 -3) 4) (eq (.sym f- base2 -1) 1)))
2869 (getter (trunc smode (.sym Dst32Rn group smode)))
2870 (setter (set (.sym Dst32Rn group smode) newval))
2871 )
2872 )
2873)
2874
2875(dst32-Rn-direct-Ext-operand ExtUnprefixed 4 8 QI HI)
2876(dst32-Rn-direct-Ext-operand ExtUnprefixed 4 8 HI SI)
2877
2878(define-derived-operand
2879 (name dst32-R3-direct-Unprefixed-HI)
2880 (comment "m32c R3 direct HI")
2881 (attrs (machine 32))
2882 (mode HI)
2883 (args (R3))
2884 (syntax "$R3")
2885 (base-ifield f-4-6)
2886 (encoding (+ (f-4-3 4) (f-8-2 #x1)))
2887 (ifield-assertion (andif (eq f-4-3 4) (eq f-8-2 #x1)))
2888 (getter (trunc HI R3))
2889 (setter (set R3 newval))
2890)
2891;-------------------------------------------------------------
2892; An direct
2893;-------------------------------------------------------------
2894
2895(define-pmacro (dst16-An-direct-operand xmode)
2896 (begin
2897 (define-derived-operand
2898 (name (.sym dst16-An-direct- xmode))
2899 (comment (.str "m16c An direct destination " xmode))
2900 (attrs (machine 16))
2901 (mode xmode)
2902 (args ((.sym Dst16An xmode)))
2903 (syntax (.str "$Dst16An" xmode))
2904 (base-ifield f-12-4)
2905 (encoding (+ (f-12-2 1) (f-14-1 0) (.sym Dst16An xmode)))
2906 (ifield-assertion (andif (eq f-12-2 1) (eq f-14-1 0)))
2907 (getter (trunc xmode (.sym Dst16An xmode)))
2908 (setter (set (.sym Dst16An xmode) newval))
2909 )
2910 )
2911)
2912
2913(dst16-An-direct-operand QI)
2914(dst16-An-direct-operand HI)
2915(dst16-An-direct-operand SI)
2916
2917(define-pmacro (dst32-An-direct-operand group base1 base2 xmode)
2918 (begin
2919 (define-derived-operand
2920 (name (.sym dst32-An-direct- group - xmode))
2921 (comment (.str "m32c An direct destination " xmode))
2922 (attrs (machine 32))
2923 (mode xmode)
2924 (args ((.sym Dst32An group xmode)))
2925 (syntax (.str "$Dst32An" group xmode))
2926 (base-ifield (.sym f- base1 -6))
2927 (encoding (+ ((.sym f- base1 -3) 0) ((.sym f- base2 -1) 1) (.sym Dst32An group xmode)))
2928 (ifield-assertion (andif (eq (.sym f- base1 -3) 0) (eq (.sym f- base2 -1) 1)))
2929 (getter (trunc xmode (.sym Dst32An group xmode)))
2930 (setter (set (.sym Dst32An group xmode) newval))
2931 )
2932 )
2933)
2934
2935(dst32-An-direct-operand Unprefixed 4 8 QI)
2936(dst32-An-direct-operand Prefixed 12 16 QI)
2937(dst32-An-direct-operand Unprefixed 4 8 HI)
2938(dst32-An-direct-operand Prefixed 12 16 HI)
2939(dst32-An-direct-operand Unprefixed 4 8 SI)
2940(dst32-An-direct-operand Prefixed 12 16 SI)
2941
2942;-------------------------------------------------------------
2943; An indirect
2944;-------------------------------------------------------------
2945
2946(define-pmacro (dst16-An-indirect-operand xmode)
2947 (begin
2948 (define-derived-operand
2949 (name (.sym dst16-An-indirect- xmode))
2950 (comment (.str "m16c An indirect destination " xmode))
2951 (attrs (machine 16))
2952 (mode xmode)
2953 (args (Dst16An))
2954 (syntax "[$Dst16An]")
2955 (base-ifield f-12-4)
2956 (encoding (+ (f-12-2 1) (f-14-1 1) Dst16An))
2957 (ifield-assertion (andif (eq f-12-2 1) (eq f-14-1 1)))
2958 (getter (mem16 xmode Dst16An))
2959 (setter (set (mem16 xmode Dst16An) newval))
2960 )
2961 )
2962)
2963
2964(dst16-An-indirect-operand QI)
2965(dst16-An-indirect-operand HI)
2966(dst16-An-indirect-operand SI)
2967
2968(define-derived-operand
2969 (name dst16-An-indirect-Ext-QI)
2970 (comment "m16c An indirect destination QI")
2971 (attrs (machine 16))
2972 (mode HI)
2973 (args (Dst16An))
2974 (syntax "[$Dst16An]")
2975 (base-ifield f-12-4)
2976 (encoding (+ (f-12-2 1) (f-14-1 1) Dst16An))
2977 (ifield-assertion (andif (eq f-12-2 1) (eq f-14-1 1)))
2978 (getter (mem16 QI Dst16An))
2979 (setter (set (mem16 HI Dst16An) newval))
2980)
2981
2982(define-pmacro (dst32-An-indirect-operand group base1 base2 smode dmode)
2983 (begin
2984 (define-derived-operand
2985 (name (.sym dst32-An-indirect- group - smode))
2986 (comment (.str "m32c An indirect destination " smode))
2987 (attrs (machine 32))
2988 (mode dmode)
2989 (args ((.sym Dst32An group)))
2990 (syntax (.str "[$Dst32An" group "]"))
2991 (base-ifield (.sym f- base1 -6))
2992 (encoding (+ ((.sym f- base1 -3) 0) ((.sym f- base2 -1) 0) (.sym Dst32An group)))
2993 (ifield-assertion (andif (eq (.sym f- base1 -3) 0) (eq (.sym f- base2 -1) 0)))
2994 (getter (c-call dmode (.str "operand_getter_" dmode) (.sym Dst32An group)
2995 (const 0)))
2996 (setter (c-call DFLT (.str "operand_setter_" dmode) newval
2997 (.sym Dst32An group) (const 0)))
2998; (getter (mem32 smode (.sym Dst32An group)))
2999; (setter (set (mem32 dmode (.sym Dst32An group)) newval))
3000 )
3001 )
3002)
3003
3004(dst32-An-indirect-operand Unprefixed 4 8 QI QI)
3005(dst32-An-indirect-operand Prefixed 12 16 QI QI)
3006(dst32-An-indirect-operand Unprefixed 4 8 HI HI)
3007(dst32-An-indirect-operand Prefixed 12 16 HI HI)
3008(dst32-An-indirect-operand Unprefixed 4 8 SI SI)
3009(dst32-An-indirect-operand Prefixed 12 16 SI SI)
3010(dst32-An-indirect-operand ExtUnprefixed 4 8 QI HI)
3011(dst32-An-indirect-operand ExtUnprefixed 4 8 HI SI)
3012
3013;-------------------------------------------------------------
3014; dsp:d[r] relative
3015;-------------------------------------------------------------
3016
3017(define-pmacro (dst16-relative-operand offset xmode)
3018 (begin
3019 (define-derived-operand
3020 (name (.sym dst16- offset -8-SB-relative- xmode))
3021 (comment (.str "m16c dsp:8[sb] relative destination " xmode))
3022 (attrs (machine 16))
3023 (mode xmode)
3024 (args ((.sym Dsp- offset -u8)))
3025 (syntax (.str "${Dsp-" offset "-u8}[sb]"))
3026 (base-ifield f-12-4)
3027 (encoding (+ (f-12-4 #xA) (.sym Dsp- offset -u8)))
3028 (ifield-assertion (eq f-12-4 #xA))
3029 (getter (mem16 xmode (add (.sym Dsp- offset -u8) (reg h-sb))))
3030 (setter (set (mem16 xmode (add (.sym Dsp- offset -u8) (reg h-sb))) newval))
3031 )
3032 (define-derived-operand
3033 (name (.sym dst16- offset -16-SB-relative- xmode))
3034 (comment (.str "m16c dsp:16[sb] relative destination " xmode))
3035 (attrs (machine 16))
3036 (mode xmode)
3037 (args ((.sym Dsp- offset -u16)))
3038 (syntax (.str "${Dsp-" offset "-u16}[sb]"))
3039 (base-ifield f-12-4)
3040 (encoding (+ (f-12-4 #xE) (.sym Dsp- offset -u16)))
3041 (ifield-assertion (eq f-12-4 #xE))
3042 (getter (mem16 xmode (add (.sym Dsp- offset -u16) (reg h-sb))))
3043 (setter (set (mem16 xmode (add (.sym Dsp- offset -u16) (reg h-sb))) newval))
3044 )
3045 (define-derived-operand
3046 (name (.sym dst16- offset -8-FB-relative- xmode))
3047 (comment (.str "m16c dsp:8[fb] relative destination " xmode))
3048 (attrs (machine 16))
3049 (mode xmode)
3050 (args ((.sym Dsp- offset -s8)))
3051 (syntax (.str "${Dsp-" offset "-s8}[fb]"))
3052 (base-ifield f-12-4)
3053 (encoding (+ (f-12-4 #xB) (.sym Dsp- offset -s8)))
3054 (ifield-assertion (eq f-12-4 #xB))
3055 (getter (mem16 xmode (add (.sym Dsp- offset -s8) (reg h-fb))))
3056 (setter (set (mem16 xmode (add (.sym Dsp- offset -s8) (reg h-fb))) newval))
3057 )
3058 (define-derived-operand
3059 (name (.sym dst16- offset -8-An-relative- xmode))
3060 (comment (.str "m16c dsp:8[An] relative destination " xmode))
3061 (attrs (machine 16))
3062 (mode xmode)
3063 (args (Dst16An (.sym Dsp- offset -u8)))
3064 (syntax (.str "${Dsp-" offset "-u8}[$Dst16An]"))
3065 (base-ifield f-12-4)
3066 (encoding (+ (f-12-2 2) (f-14-1 0) (.sym Dsp- offset -u8) Dst16An))
3067 (ifield-assertion (andif (eq f-12-2 2) (eq f-14-1 0)))
3068 (getter (mem16 xmode (add (.sym Dsp- offset -u8) Dst16An)))
3069 (setter (set (mem16 xmode (add (.sym Dsp- offset -u8) Dst16An)) newval))
3070 )
3071 (define-derived-operand
3072 (name (.sym dst16- offset -16-An-relative- xmode))
3073 (comment (.str "m16c dsp:16[An] relative destination " xmode))
3074 (attrs (machine 16))
3075 (mode xmode)
3076 (args (Dst16An (.sym Dsp- offset -u16)))
3077 (syntax (.str "${Dsp-" offset "-u16}[$Dst16An]"))
3078 (base-ifield f-12-4)
3079 (encoding (+ (f-12-2 3) (f-14-1 0) (.sym Dsp- offset -u16) Dst16An))
3080 (ifield-assertion (andif (eq f-12-2 3) (eq f-14-1 0)))
3081 (getter (mem16 xmode (add (.sym Dsp- offset -u16) Dst16An)))
3082 (setter (set (mem16 xmode (add (.sym Dsp- offset -u16) Dst16An)) newval))
3083 )
3084 )
3085)
3086
3087(dst16-relative-operand 16 QI)
3088(dst16-relative-operand 24 QI)
3089(dst16-relative-operand 32 QI)
3090(dst16-relative-operand 40 QI)
3091(dst16-relative-operand 48 QI)
3092(dst16-relative-operand 16 HI)
3093(dst16-relative-operand 24 HI)
3094(dst16-relative-operand 32 HI)
3095(dst16-relative-operand 40 HI)
3096(dst16-relative-operand 48 HI)
3097(dst16-relative-operand 16 SI)
3098(dst16-relative-operand 24 SI)
3099(dst16-relative-operand 32 SI)
3100(dst16-relative-operand 40 SI)
3101(dst16-relative-operand 48 SI)
3102
3103(define-pmacro (dst16-relative-Ext-operand offset smode dmode)
3104 (begin
3105 (define-derived-operand
3106 (name (.sym dst16- offset -8-SB-relative-Ext- smode))
3107 (comment (.str "m16c dsp:8[sb] relative destination " smode))
3108 (attrs (machine 16))
3109 (mode dmode)
3110 (args ((.sym Dsp- offset -u8)))
3111 (syntax (.str "${Dsp-" offset "-u8}[sb]"))
3112 (base-ifield f-12-4)
3113 (encoding (+ (f-12-4 #xA) (.sym Dsp- offset -u8)))
3114 (ifield-assertion (eq f-12-4 #xA))
3115 (getter (mem16 smode (add (.sym Dsp- offset -u8) (reg h-sb))))
3116 (setter (set (mem16 dmode (add (.sym Dsp- offset -u8) (reg h-sb))) newval))
3117 )
3118 (define-derived-operand
3119 (name (.sym dst16- offset -16-SB-relative-Ext- smode))
3120 (comment (.str "m16c dsp:16[sb] relative destination " smode))
3121 (attrs (machine 16))
3122 (mode dmode)
3123 (args ((.sym Dsp- offset -u16)))
3124 (syntax (.str "${Dsp-" offset "-u16}[sb]"))
3125 (base-ifield f-12-4)
3126 (encoding (+ (f-12-4 #xE) (.sym Dsp- offset -u16)))
3127 (ifield-assertion (eq f-12-4 #xE))
3128 (getter (mem16 smode (add (.sym Dsp- offset -u16) (reg h-sb))))
3129 (setter (set (mem16 dmode (add (.sym Dsp- offset -u16) (reg h-sb))) newval))
3130 )
3131 (define-derived-operand
3132 (name (.sym dst16- offset -8-FB-relative-Ext- smode))
3133 (comment (.str "m16c dsp:8[fb] relative destination " smode))
3134 (attrs (machine 16))
3135 (mode dmode)
3136 (args ((.sym Dsp- offset -s8)))
3137 (syntax (.str "${Dsp-" offset "-s8}[fb]"))
3138 (base-ifield f-12-4)
3139 (encoding (+ (f-12-4 #xB) (.sym Dsp- offset -s8)))
3140 (ifield-assertion (eq f-12-4 #xB))
3141 (getter (mem16 smode (add (.sym Dsp- offset -s8) (reg h-fb))))
3142 (setter (set (mem16 dmode (add (.sym Dsp- offset -s8) (reg h-fb))) newval))
3143 )
3144 (define-derived-operand
3145 (name (.sym dst16- offset -8-An-relative-Ext- smode))
3146 (comment (.str "m16c dsp:8[An] relative destination " smode))
3147 (attrs (machine 16))
3148 (mode dmode)
3149 (args (Dst16An (.sym Dsp- offset -u8)))
3150 (syntax (.str "${Dsp-" offset "-u8}[$Dst16An]"))
3151 (base-ifield f-12-4)
3152 (encoding (+ (f-12-2 2) (f-14-1 0) (.sym Dsp- offset -u8) Dst16An))
3153 (ifield-assertion (andif (eq f-12-2 2) (eq f-14-1 0)))
3154 (getter (mem16 smode (add (.sym Dsp- offset -u8) Dst16An)))
3155 (setter (set (mem16 dmode (add (.sym Dsp- offset -u8) Dst16An)) newval))
3156 )
3157 (define-derived-operand
3158 (name (.sym dst16- offset -16-An-relative-Ext- smode))
3159 (comment (.str "m16c dsp:16[An] relative destination " smode))
3160 (attrs (machine 16))
3161 (mode dmode)
3162 (args (Dst16An (.sym Dsp- offset -u16)))
3163 (syntax (.str "${Dsp-" offset "-u16}[$Dst16An]"))
3164 (base-ifield f-12-4)
3165 (encoding (+ (f-12-2 3) (f-14-1 0) (.sym Dsp- offset -u16) Dst16An))
3166 (ifield-assertion (andif (eq f-12-2 3) (eq f-14-1 0)))
3167 (getter (mem16 smode (add (.sym Dsp- offset -u16) Dst16An)))
3168 (setter (set (mem16 dmode (add (.sym Dsp- offset -u16) Dst16An)) newval))
3169 )
3170 )
3171)
3172
3173(dst16-relative-Ext-operand 16 QI HI)
3174
3175(define-pmacro (dst32-relative-operand offset group base1 base2 smode dmode)
3176 (begin
3177 (define-derived-operand
3178 (name (.sym dst32- offset -8-SB-relative- group - smode))
3179 (comment (.str "m32c dsp:8[sb] relative destination " smode))
3180 (attrs (machine 32))
3181 (mode dmode)
3182 (args ((.sym Dsp- offset -u8)))
3183 (syntax (.str "${Dsp-" offset "-u8}[sb]"))
3184 (base-ifield (.sym f- base1 -6))
3185 (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u8)))
3186 (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -2) 2)))
3187 (getter (c-call dmode (.str "operand_getter_" dmode) sb (.sym Dsp- offset -u8)))
3188 (setter (c-call DFLT (.str "operand_setter_" dmode) newval sb (.sym Dsp- offset -u8)))
3189; (getter (mem32 smode (add (.sym Dsp- offset -u8) (reg h-sb))))
3190; (setter (set (mem32 dmode (add (.sym Dsp- offset -u8) (reg h-sb))) newval))
3191 )
3192 (define-derived-operand
3193 (name (.sym dst32- offset -16-SB-relative- group - smode))
3194 (comment (.str "m32c dsp:16[sb] relative destination " smode))
3195 (attrs (machine 32))
3196 (mode dmode)
3197 (args ((.sym Dsp- offset -u16)))
3198 (syntax (.str "${Dsp-" offset "-u16}[sb]"))
3199 (base-ifield (.sym f- base1 -6))
3200 (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u16)))
3201 (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -2) 2)))
3202 (getter (c-call dmode (.str "operand_getter_" dmode) sb (.sym Dsp- offset -u16)))
3203 (setter (c-call DFLT (.str "operand_setter_" dmode) newval sb (.sym Dsp- offset -u16)))
3204; (getter (mem32 smode (add (.sym Dsp- offset -u16) (reg h-sb))))
3205; (setter (set (mem32 dmode (add (.sym Dsp- offset -u16) (reg h-sb))) newval))
3206 )
3207 (define-derived-operand
3208 (name (.sym dst32- offset -8-FB-relative- group - smode))
3209 (comment (.str "m32c dsp:8[fb] relative destination " smode))
3210 (attrs (machine 32))
3211 (mode dmode)
3212 (args ((.sym Dsp- offset -s8)))
3213 (syntax (.str "${Dsp-" offset "-s8}[fb]"))
3214 (base-ifield (.sym f- base1 -6))
3215 (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -2) 3) (.sym Dsp- offset -s8)))
3216 (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -2) 3)))
3217 (getter (c-call dmode (.str "operand_getter_" dmode) fb (.sym Dsp- offset -s8)))
3218 (setter (c-call DFLT (.str "operand_setter_" dmode) newval fb (.sym Dsp- offset -s8)))
3219; (getter (mem32 smode (add (.sym Dsp- offset -s8) (reg h-fb))))
3220; (setter (set (mem32 dmode (add (.sym Dsp- offset -s8) (reg h-fb))) newval))
3221 )
3222 (define-derived-operand
3223 (name (.sym dst32- offset -16-FB-relative- group - smode))
3224 (comment (.str "m32c dsp:16[fb] relative destination " smode))
3225 (attrs (machine 32))
3226 (mode dmode)
3227 (args ((.sym Dsp- offset -s16)))
3228 (syntax (.str "${Dsp-" offset "-s16}[fb]"))
3229 (base-ifield (.sym f- base1 -6))
3230 (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -2) 3) (.sym Dsp- offset -s16)))
3231 (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -2) 3)))
3232 (getter (c-call dmode (.str "operand_getter_" dmode) fb (.sym Dsp- offset -s16)))
3233 (setter (c-call DFLT (.str "operand_setter_" dmode) newval fb (.sym Dsp- offset -s16)))
3234; (getter (mem32 smode (add (.sym Dsp- offset -s16) (reg h-fb))))
3235; (setter (set (mem32 dmode (add (.sym Dsp- offset -s16) (reg h-fb))) newval))
3236 )
3237 (define-derived-operand
3238 (name (.sym dst32- offset -8-An-relative- group - smode))
3239 (comment (.str "m32c dsp:8[An] relative destination " smode))
3240 (attrs (machine 32))
3241 (mode dmode)
3242 (args ((.sym Dst32An group) (.sym Dsp- offset -u8)))
3243 (syntax (.str "${Dsp-" offset "-u8}[$Dst32An" group "]"))
3244 (base-ifield (.sym f- base1 -6))
3245 (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -1) 0) (.sym Dsp- offset -u8) (.sym Dst32An group)))
3246 (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -1) 0)))
3247 (getter (c-call dmode (.str "operand_getter_" dmode) (.sym Dst32An group) (.sym Dsp- offset -u8)))
3248 (setter (c-call DFLT (.str "operand_setter_" dmode) newval (.sym Dst32An group) (.sym Dsp- offset -u8)))
3249; (getter (mem32 smode (add (.sym Dsp- offset -u8) (.sym Dst32An group))))
3250; (setter (set (mem32 dmode (add (.sym Dsp- offset -u8) (.sym Dst32An group))) newval))
3251 )
3252 (define-derived-operand
3253 (name (.sym dst32- offset -16-An-relative- group - smode))
3254 (comment (.str "m32c dsp:16[An] relative destination " smode))
3255 (attrs (machine 32))
3256 (mode dmode)
3257 (args ((.sym Dst32An group) (.sym Dsp- offset -u16)))
3258 (syntax (.str "${Dsp-" offset "-u16}[$Dst32An" group "]"))
3259 (base-ifield (.sym f- base1 -6))
3260 (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -1) 0) (.sym Dsp- offset -u16) (.sym Dst32An group)))
3261 (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -1) 0)))
3262 (getter (c-call dmode (.str "operand_getter_" dmode) (.sym Dst32An group) (.sym Dsp- offset -u16)))
3263 (setter (c-call DFLT (.str "operand_setter_" dmode) newval (.sym Dst32An group) (.sym Dsp- offset -u16)))
3264; (getter (mem32 smode (add (.sym Dsp- offset -u16) (.sym Dst32An group))))
3265; (setter (set (mem32 dmode (add (.sym Dsp- offset -u16) (.sym Dst32An group))) newval))
3266 )
3267 (define-derived-operand
3268 (name (.sym dst32- offset -24-An-relative- group - smode))
3269 (comment (.str "m32c dsp:16[An] relative destination " smode))
3270 (attrs (machine 32))
3271 (mode dmode)
3272 (args ((.sym Dst32An group) (.sym Dsp- offset -u24)))
3273 (syntax (.str "${Dsp-" offset "-u24}[$Dst32An" group "]"))
3274 (base-ifield (.sym f- base1 -6))
3275 (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -1) 0) (.sym Dsp- offset -u24) (.sym Dst32An group)))
3276 (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -1) 0)))
3277 (getter (c-call dmode (.str "operand_getter_" dmode) (.sym Dst32An group) (.sym Dsp- offset -u24)))
3278 (setter (c-call DFLT (.str "operand_setter_" dmode) newval (.sym Dst32An group) (.sym Dsp- offset -u24)))
3279; (getter (mem32 smode (add (.sym Dsp- offset -u24) (.sym Dst32An group))))
3280; (setter (set (mem32 dmode (add (.sym Dsp- offset -u24) (.sym Dst32An group))) newval))
3281 )
3282 )
3283)
3284
3285(dst32-relative-operand 16 Unprefixed 4 8 QI QI)
3286(dst32-relative-operand 24 Unprefixed 4 8 QI QI)
3287(dst32-relative-operand 32 Unprefixed 4 8 QI QI)
3288(dst32-relative-operand 40 Unprefixed 4 8 QI QI)
3289(dst32-relative-operand 16 Unprefixed 4 8 HI HI)
3290(dst32-relative-operand 24 Unprefixed 4 8 HI HI)
3291(dst32-relative-operand 32 Unprefixed 4 8 HI HI)
3292(dst32-relative-operand 40 Unprefixed 4 8 HI HI)
3293(dst32-relative-operand 16 Unprefixed 4 8 SI SI)
3294(dst32-relative-operand 24 Unprefixed 4 8 SI SI)
3295(dst32-relative-operand 32 Unprefixed 4 8 SI SI)
3296(dst32-relative-operand 40 Unprefixed 4 8 SI SI)
3297
3298(dst32-relative-operand 24 Prefixed 12 16 QI QI)
3299(dst32-relative-operand 32 Prefixed 12 16 QI QI)
3300(dst32-relative-operand 40 Prefixed 12 16 QI QI)
3301(dst32-relative-operand 48 Prefixed 12 16 QI QI)
3302(dst32-relative-operand 24 Prefixed 12 16 HI HI)
3303(dst32-relative-operand 32 Prefixed 12 16 HI HI)
3304(dst32-relative-operand 40 Prefixed 12 16 HI HI)
3305(dst32-relative-operand 48 Prefixed 12 16 HI HI)
3306(dst32-relative-operand 24 Prefixed 12 16 SI SI)
3307(dst32-relative-operand 32 Prefixed 12 16 SI SI)
3308(dst32-relative-operand 40 Prefixed 12 16 SI SI)
3309(dst32-relative-operand 48 Prefixed 12 16 SI SI)
3310
3311(dst32-relative-operand 16 ExtUnprefixed 4 8 QI HI)
3312(dst32-relative-operand 16 ExtUnprefixed 4 8 HI SI)
3313
3314;-------------------------------------------------------------
3315; Absolute address
3316;-------------------------------------------------------------
3317
3318(define-pmacro (dst16-absolute offset xmode)
3319 (begin
3320 (define-derived-operand
3321 (name (.sym dst16- offset -16-absolute- xmode))
3322 (comment (.str "m16c absolute address " xmode))
3323 (attrs (machine 16))
3324 (mode xmode)
3325 (args ((.sym Dsp- offset -u16)))
3326 (syntax (.str "${Dsp-" offset "-u16}"))
3327 (base-ifield f-12-4)
3328 (encoding (+ (f-12-4 #xF) (.sym Dsp- offset -u16)))
3329 (ifield-assertion (eq f-12-4 #xF))
3330 (getter (mem16 xmode (.sym Dsp- offset -u16)))
3331 (setter (set (mem16 xmode (.sym Dsp- offset -u16)) newval))
3332 )
3333 )
3334)
3335
3336(dst16-absolute 16 QI)
3337(dst16-absolute 24 QI)
3338(dst16-absolute 32 QI)
3339(dst16-absolute 40 QI)
3340(dst16-absolute 48 QI)
3341(dst16-absolute 16 HI)
3342(dst16-absolute 24 HI)
3343(dst16-absolute 32 HI)
3344(dst16-absolute 40 HI)
3345(dst16-absolute 48 HI)
3346(dst16-absolute 16 SI)
3347(dst16-absolute 24 SI)
3348(dst16-absolute 32 SI)
3349(dst16-absolute 40 SI)
3350(dst16-absolute 48 SI)
3351
3352(define-derived-operand
3353 (name dst16-16-16-absolute-Ext-QI)
3354 (comment "m16c absolute address QI")
3355 (attrs (machine 16))
3356 (mode HI)
3357 (args (Dsp-16-u16))
3358 (syntax "${Dsp-16-u16}")
3359 (base-ifield f-12-4)
3360 (encoding (+ (f-12-4 #xF) Dsp-16-u16))
3361 (ifield-assertion (eq f-12-4 #xF))
3362 (getter (mem16 QI Dsp-16-u16))
3363 (setter (set (mem16 HI Dsp-16-u16) newval))
3364)
3365
3366(define-pmacro (dst32-absolute offset group base1 base2 smode dmode)
3367 (begin
3368 (define-derived-operand
3369 (name (.sym dst32- offset -16-absolute- group - smode))
3370 (comment (.str "m32c absolute address " smode))
3371 (attrs (machine 32))
3372 (mode dmode)
3373 (args ((.sym Dsp- offset -u16)))
3374 (syntax (.str "${Dsp-" offset "-u16}"))
3375 (base-ifield (.sym f- base1 -6))
3376 (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 3) (.sym Dsp- offset -u16)))
3377 (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 3)))
3378 (getter (c-call smode (.str "operand_getter_" smode) (const 0) (.sym Dsp- offset -u16)))
3379 (setter (c-call DFLT (.str "operand_setter_" dmode) newval (const 0) (.sym Dsp- offset -u16)))
3380; (getter (mem32 smode (.sym Dsp- offset -u16)))
3381; (setter (set (mem32 dmode (.sym Dsp- offset -u16)) newval))
3382 )
3383 (define-derived-operand
3384 (name (.sym dst32- offset -24-absolute- group - smode))
3385 (comment (.str "m32c absolute address " smode))
3386 (attrs (machine 32))
3387 (mode dmode)
3388 (args ((.sym Dsp- offset -u24)))
3389 (syntax (.str "${Dsp-" offset "-u24}"))
3390 (base-ifield (.sym f- base1 -6))
3391 (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u24)))
3392 (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 2)))
3393 (getter (c-call smode (.str "operand_getter_" smode) (const 0) (.sym Dsp- offset -u24)))
3394 (setter (c-call DFLT (.str "operand_setter_" dmode) newval (const 0) (.sym Dsp- offset -u24)))
3395; (getter (mem32 smode (.sym Dsp- offset -u24)))
3396; (setter (set (mem32 dmode (.sym Dsp- offset -u24)) newval))
3397 )
3398 )
3399)
3400
3401(dst32-absolute 16 Unprefixed 4 8 QI QI)
3402(dst32-absolute 24 Unprefixed 4 8 QI QI)
3403(dst32-absolute 32 Unprefixed 4 8 QI QI)
3404(dst32-absolute 40 Unprefixed 4 8 QI QI)
3405(dst32-absolute 16 Unprefixed 4 8 HI HI)
3406(dst32-absolute 24 Unprefixed 4 8 HI HI)
3407(dst32-absolute 32 Unprefixed 4 8 HI HI)
3408(dst32-absolute 40 Unprefixed 4 8 HI HI)
3409(dst32-absolute 16 Unprefixed 4 8 SI SI)
3410(dst32-absolute 24 Unprefixed 4 8 SI SI)
3411(dst32-absolute 32 Unprefixed 4 8 SI SI)
3412(dst32-absolute 40 Unprefixed 4 8 SI SI)
3413
3414(dst32-absolute 24 Prefixed 12 16 QI QI)
3415(dst32-absolute 32 Prefixed 12 16 QI QI)
3416(dst32-absolute 40 Prefixed 12 16 QI QI)
3417(dst32-absolute 48 Prefixed 12 16 QI QI)
3418(dst32-absolute 24 Prefixed 12 16 HI HI)
3419(dst32-absolute 32 Prefixed 12 16 HI HI)
3420(dst32-absolute 40 Prefixed 12 16 HI HI)
3421(dst32-absolute 48 Prefixed 12 16 HI HI)
3422(dst32-absolute 24 Prefixed 12 16 SI SI)
3423(dst32-absolute 32 Prefixed 12 16 SI SI)
3424(dst32-absolute 40 Prefixed 12 16 SI SI)
3425(dst32-absolute 48 Prefixed 12 16 SI SI)
3426
3427(dst32-absolute 16 ExtUnprefixed 4 8 QI HI)
3428(dst32-absolute 16 ExtUnprefixed 4 8 HI SI)
3429
3430;-------------------------------------------------------------
3431; An indirect indirect
3432;-------------------------------------------------------------
3433
3434;(define-pmacro (dst-An-indirect-indirect-operand xmode)
3435; (define-derived-operand
3436; (name (.sym dst32-An-indirect-indirect- xmode))
3437; (comment (.str "m32c An indirect indirect destination " xmode))
3438; (attrs (machine 32))
3439; (mode xmode)
3440; (args (Dst32AnPrefixed))
3441; (syntax (.str "[[$Dst32AnPrefixed]]"))
3442; (base-ifield f-12-6)
3443; (encoding (+ (f-12-3 0) (f-16-1 0) Dst32AnPrefixed))
3444; (ifield-assertion (andif (eq f-12-3 0) (eq f-16-1 0)))
3445; (getter (mem32 xmode (indirect-addr Dst32AnPrefixed)))
3446; (setter (set (mem32 xmode (indirect-addr Dst32AnPrefixed)) newval))
3447; )
3448;)
3449
3450; (dst-An-indirect-indirect-operand QI)
3451; (dst-An-indirect-indirect-operand HI)
3452; (dst-An-indirect-indirect-operand SI)
3453
3454;-------------------------------------------------------------
3455; Relative indirect
3456;-------------------------------------------------------------
3457
3458(define-pmacro (dst-relative-indirect-operand offset xmode)
3459 (begin
3460; (define-derived-operand
3461; (name (.sym dst32- offset -8-SB-relative-indirect- xmode))
3462; (comment (.str "m32c dsp:8[sb] relative destination " xmode))
3463; (attrs (machine 32))
3464; (mode xmode)
3465; (args ((.sym Dsp- offset -u8)))
3466; (syntax (.str "[${Dsp-" offset "-u8}[sb]]"))
3467; (base-ifield f-12-6)
3468; (encoding (+ (f-12-3 1) (f-16-2 2) (.sym Dsp- offset -u8)))
3469; (ifield-assertion (andif (eq f-12-3 1) (eq f-16-2 2)))
3470; (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u8) (reg h-sb)))))
3471; (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u8) (reg h-sb)))) newval))
3472; )
3473; (define-derived-operand
3474; (name (.sym dst32- offset -16-SB-relative-indirect- xmode))
3475; (comment (.str "m32c dsp:16[sb] relative destination " xmode))
3476; (attrs (machine 32))
3477; (mode xmode)
3478; (args ((.sym Dsp- offset -u16)))
3479; (syntax (.str "[${Dsp-" offset "-u16}[sb]]"))
3480; (base-ifield f-12-6)
3481; (encoding (+ (f-12-3 2) (f-16-2 2) (.sym Dsp- offset -u16)))
3482; (ifield-assertion (andif (eq f-12-3 2) (eq f-16-2 2)))
3483; (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u16) (reg h-sb)))))
3484; (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u16) (reg h-sb)))) newval))
3485; )
3486; (define-derived-operand
3487; (name (.sym dst32- offset -8-FB-relative-indirect- xmode))
3488; (comment (.str "m32c dsp:8[fb] relative destination " xmode))
3489; (attrs (machine 32))
3490; (mode xmode)
3491; (args ((.sym Dsp- offset -s8)))
3492; (syntax (.str "[${Dsp-" offset "-s8}[fb]]"))
3493; (base-ifield f-12-6)
3494; (encoding (+ (f-12-3 1) (f-16-2 3) (.sym Dsp- offset -s8)))
3495; (ifield-assertion (andif (eq f-12-3 1) (eq f-16-2 3)))
3496; (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -s8) (reg h-fb)))))
3497; (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -s8) (reg h-fb)))) newval))
3498; )
3499; (define-derived-operand
3500; (name (.sym dst32- offset -16-FB-relative-indirect- xmode))
3501; (comment (.str "m32c dsp:16[fb] relative destination " xmode))
3502; (attrs (machine 32))
3503; (mode xmode)
3504; (args ((.sym Dsp- offset -s16)))
3505; (syntax (.str "[${Dsp-" offset "-s16}[fb]]"))
3506; (base-ifield f-12-6)
3507; (encoding (+ (f-12-3 2) (f-16-2 3) (.sym Dsp- offset -s16)))
3508; (ifield-assertion (andif (eq f-12-3 2) (eq f-16-2 3)))
3509; (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -s16) (reg h-fb)))))
3510; (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -s16) (reg h-fb)))) newval))
3511; )
3512; (define-derived-operand
3513; (name (.sym dst32- offset -8-An-relative-indirect- xmode))
3514; (comment (.str "m32c dsp:8[An] relative indirect destination " xmode))
3515; (attrs (machine 32))
3516; (mode xmode)
3517; (args (Dst32AnPrefixed (.sym Dsp- offset -u8)))
3518; (syntax (.str "[${Dsp-" offset "-u8}[$Dst32AnPrefixed]]"))
3519; (base-ifield f-12-6)
3520; (encoding (+ (f-12-3 1) (f-16-1 0) (.sym Dsp- offset -u8) Dst32AnPrefixed))
3521; (ifield-assertion (andif (eq f-12-3 1) (eq f-16-1 0)))
3522; (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u8) Dst32AnPrefixed))))
3523; (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u8) Dst32AnPrefixed))) newval))
3524; )
3525; (define-derived-operand
3526; (name (.sym dst32- offset -16-An-relative-indirect- xmode))
3527; (comment (.str "m32c dsp:16[An] relative destination " xmode))
3528; (attrs (machine 32))
3529; (mode xmode)
3530; (args (Dst32AnPrefixed (.sym Dsp- offset -u16)))
3531; (syntax (.str "[${Dsp-" offset "-u16}[$Dst32AnPrefixed]]"))
3532; (base-ifield f-12-6)
3533; (encoding (+ (f-12-3 2) (f-16-1 0) (.sym Dsp- offset -u16) Dst32AnPrefixed))
3534; (ifield-assertion (andif (eq f-12-3 2) (eq f-16-1 0)))
3535; (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u16) Dst32AnPrefixed))))
3536; (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u16) Dst32AnPrefixed))) newval))
3537; )
3538; (define-derived-operand
3539; (name (.sym dst32- offset -24-An-relative-indirect- xmode))
3540; (comment (.str "m32c dsp:24[An] relative destination " xmode))
3541; (attrs (machine 32))
3542; (mode xmode)
3543; (args (Dst32AnPrefixed (.sym Dsp- offset -u24)))
3544; (syntax (.str "[${Dsp-" offset "-u24}[$Dst32AnPrefixed]]"))
3545; (base-ifield f-12-6)
3546; (encoding (+ (f-12-3 3) (f-16-1 0) (.sym Dsp- offset -u24) Dst32AnPrefixed))
3547; (ifield-assertion (andif (eq f-12-3 3) (eq f-16-1 0)))
3548; (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u24) Dst32AnPrefixed))))
3549; (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u24) Dst32AnPrefixed))) newval))
3550; )
3551 )
3552)
3553
3554; (dst-relative-indirect-operand 24 QI)
3555; (dst-relative-indirect-operand 32 QI)
3556; (dst-relative-indirect-operand 40 QI)
3557; (dst-relative-indirect-operand 48 QI)
3558; (dst-relative-indirect-operand 24 HI)
3559; (dst-relative-indirect-operand 32 HI)
3560; (dst-relative-indirect-operand 40 HI)
3561; (dst-relative-indirect-operand 48 HI)
3562; (dst-relative-indirect-operand 24 SI)
3563; (dst-relative-indirect-operand 32 SI)
3564; (dst-relative-indirect-operand 40 SI)
3565; (dst-relative-indirect-operand 48 SI)
3566
3567;-------------------------------------------------------------
3568; Absolute indirect
3569;-------------------------------------------------------------
3570
3571(define-pmacro (dst-absolute-indirect offset xmode)
3572 (begin
3573; (define-derived-operand
3574; (name (.sym dst32- offset -16-absolute-indirect-derived- xmode))
3575; (comment (.str "m32c absolute indirect address " xmode))
3576; (attrs (machine 32))
3577; (mode xmode)
3578; (args ((.sym Dsp- offset -u16)))
3579; (syntax (.str "[${Dsp-" offset "-u16}]"))
3580; (base-ifield f-12-6)
3581; (encoding (+ (f-12-3 3) (f-16-2 3) (.sym Dsp- offset -u16)))
3582; (ifield-assertion (andif (eq f-12-3 3) (eq f-16-2 3)))
3583; (getter (mem32 xmode (indirect-addr (.sym Dsp- offset -u16))))
3584; (setter (set (mem32 xmode (indirect-addr (.sym Dsp- offset -u16))) newval))
3585; )
3586; (define-derived-operand
3587; (name (.sym dst32- offset -24-absolute-indirect-derived- xmode))
3588; (comment (.str "m32c absolute indirect address " xmode))
3589; (attrs (machine 32))
3590; (mode xmode)
3591; (args ((.sym Dsp- offset -u24)))
3592; (syntax (.str "[${Dsp-" offset "-u24}]"))
3593; (base-ifield f-12-6)
3594; (encoding (+ (f-12-3 3) (f-16-2 2) (.sym Dsp- offset -u24)))
3595; (ifield-assertion (andif (eq f-12-3 3) (eq f-16-2 2)))
3596; (getter (mem32 xmode (indirect-addr (.sym Dsp- offset -u24))))
3597; (setter (set (mem32 xmode (indirect-addr (.sym Dsp- offset -u24))) newval))
3598; )
3599 )
3600)
3601
3602(dst-absolute-indirect 24 QI)
3603(dst-absolute-indirect 32 QI)
3604(dst-absolute-indirect 40 QI)
3605(dst-absolute-indirect 48 QI)
3606(dst-absolute-indirect 24 HI)
3607(dst-absolute-indirect 32 HI)
3608(dst-absolute-indirect 40 HI)
3609(dst-absolute-indirect 48 HI)
3610(dst-absolute-indirect 24 SI)
3611(dst-absolute-indirect 32 SI)
3612(dst-absolute-indirect 40 SI)
3613(dst-absolute-indirect 48 SI)
3614
3615;-------------------------------------------------------------
3616; Bit operands
3617;-------------------------------------------------------------
3618(define-pmacro (get-register-bit reg bitno)
3619 (and (srl reg bitno) 1)
3620)
3621
3622(define-pmacro (set-register-bit reg bitno value)
3623 (set reg (or (and reg (inv (sll 1 bitno)))
3624 (sll (and QI value 1) bitno)))
3625)
3626
3627(define-pmacro (get-memory-bit mach base bitno)
3628 (and (srl (mem-mach mach QI (add base (div bitno 8)))
3629 (mod bitno 8))
3630 1)
3631)
3632
3633(define-pmacro (set-memory-bit mach base bitno value)
3634 (sequence ((USI addr))
3635 (set addr (add base (div bitno 8)))
3636 (set (mem-mach mach QI addr)
3637 (or (and (mem-mach mach QI addr)
3638 (inv (sll 1 (mod bitno 8))))
3639 (sll (and QI value 1) (mod bitno 8)))))
3640)
3641
3642;-------------------------------------------------------------
3643; Rn direct
3644;-------------------------------------------------------------
3645
3646(define-derived-operand
3647 (name bit16-Rn-direct)
3648 (comment "m16c Rn direct bit")
3649 (attrs (machine 16))
3650 (mode BI)
3651 (args (Bitno16R Bit16Rn))
3652 (syntax "$Bitno16R,$Bit16Rn")
3653 (base-ifield f-12-4)
3654 (encoding (+ (f-12-2 0) Bit16Rn Bitno16R))
3655 (ifield-assertion (eq f-12-2 0))
3656 (getter (get-register-bit Bit16Rn Bitno16R))
3657 (setter (set-register-bit Bit16Rn Bitno16R newval))
3658)
3659
3660(define-pmacro (bit32-Rn-direct-operand group base)
3661 (begin
3662 (define-derived-operand
3663 (name (.sym bit32-Rn-direct- group))
3664 (comment "m32c Rn direct bit")
3665 (attrs (machine 32))
3666 (mode BI)
3667 (args ((.sym Bitno32 group) (.sym Bit32Rn group)))
3668 (syntax (.str "$Bitno32" group ",$Bit32Rn" group))
3669 (base-ifield (.sym f- base -6))
3670 (encoding (+ ((.sym f- base -3) 4) (.sym Bit32Rn group) (.sym Bitno32 group)))
3671 (ifield-assertion (eq (.sym f- base -3) 4))
3672 (getter (get-register-bit (.sym Bit32Rn group) (.sym Bitno32 group)))
3673 (setter (set-register-bit (.sym Bit32Rn group) (.sym Bitno32 group) newval))
3674 )
3675 )
3676)
3677
3678(bit32-Rn-direct-operand Unprefixed 4)
3679(bit32-Rn-direct-operand Prefixed 12)
3680
3681;-------------------------------------------------------------
3682; An direct
3683;-------------------------------------------------------------
3684
3685(define-derived-operand
3686 (name bit16-An-direct)
3687 (comment "m16c An direct bit")
3688 (attrs (machine 16))
3689 (mode BI)
3690 (args (Bitno16R Bit16An))
3691 (syntax "$Bitno16R,$Bit16An")
3692 (base-ifield f-12-4)
3693 (encoding (+ (f-12-2 1) (f-14-1 0) Bit16An Bitno16R))
3694 (ifield-assertion (andif (eq f-12-2 1) (eq f-14-1 0)))
3695 (getter (get-register-bit Bit16An Bitno16R))
3696 (setter (set-register-bit Bit16An Bitno16R newval))
3697)
3698
3699(define-pmacro (bit32-An-direct-operand group base1 base2)
3700 (begin
3701 (define-derived-operand
3702 (name (.sym bit32-An-direct- group))
3703 (comment "m32c An direct bit")
3704 (attrs (machine 32))
3705 (mode BI)
3706 (args ((.sym Bitno32 group) (.sym Bit32An group)))
3707 (syntax (.str "$Bitno32" group ",$Bit32An" group))
3708 (base-ifield (.sym f- base1 -6))
3709 (encoding (+ ((.sym f- base1 -3) 0) ((.sym f- base2 -1) 1) (.sym Bit32An group) (.sym Bitno32 group)))
3710 (ifield-assertion (andif (eq (.sym f- base1 -3) 0) (eq (.sym f- base2 -1) 1)))
3711 (getter (get-register-bit (.sym Bit32An group) (.sym Bitno32 group)))
3712 (setter (set-register-bit (.sym Bit32An group) (.sym Bitno32 group) newval))
3713 )
3714 )
3715)
3716
3717(bit32-An-direct-operand Unprefixed 4 8)
3718(bit32-An-direct-operand Prefixed 12 16)
3719
3720;-------------------------------------------------------------
3721; An indirect
3722;-------------------------------------------------------------
3723
3724(define-derived-operand
3725 (name bit16-An-indirect)
3726 (comment "m16c An indirect bit")
3727 (attrs (machine 16))
3728 (mode BI)
3729 (args (Bit16An))
3730 (syntax "[$Bit16An]")
3731 (base-ifield f-12-4)
3732 (encoding (+ (f-12-2 1) (f-14-1 1) Bit16An))
3733 (ifield-assertion (andif (eq f-12-2 1) (eq f-14-1 1)))
3734 (getter (get-memory-bit 16 0 Bit16An))
3735 (setter (set-memory-bit 16 0 Bit16An newval))
3736)
3737
3738(define-pmacro (bit32-An-indirect-operand group base1 base2)
3739 (begin
3740 (define-derived-operand
3741 (name (.sym bit32-An-indirect- group))
3742 (comment "m32c An indirect destination ")
3743 (attrs (machine 32))
3744 (mode BI)
3745 (args ((.sym Bitno32 group) (.sym Bit32An group)))
3746 (syntax (.str "$Bitno32" group ",[$Bit32An" group "]"))
3747 (base-ifield (.sym f- base1 -6))
3748 (encoding (+ ((.sym f- base1 -3) 0) ((.sym f- base2 -1) 0) (.sym Bit32An group) (.sym Bitno32 group)))
3749 (ifield-assertion (andif (eq (.sym f- base1 -3) 0) (eq (.sym f- base2 -1) 0)))
3750 (getter (get-memory-bit 32 (.sym Bit32An group) (.sym Bitno32 group)))
3751 (setter (set-memory-bit 32 (.sym Bit32An group) (.sym Bitno32 group) newval))
3752 )
3753 )
3754)
3755
3756(bit32-An-indirect-operand Unprefixed 4 8)
3757(bit32-An-indirect-operand Prefixed 12 16)
3758
3759;-------------------------------------------------------------
3760; dsp:d[r] relative
3761;-------------------------------------------------------------
3762
3763(define-pmacro (bit16-relative-operand offset)
3764 (begin
3765 (define-derived-operand
3766 (name (.sym bit16- offset -8-SB-relative))
3767 (comment (.str "m16c dsp:8[sb] relative bit " xmode))
3768 (attrs (machine 16))
3769 (mode BI)
3770 (args ((.sym BitBase16- offset -u8)))
3771 (syntax (.str "${BitBase16-" offset "-u8}[sb]"))
3772 (base-ifield f-12-4)
3773 (encoding (+ (f-12-4 #xA) (.sym BitBase16- offset -u8)))
3774 (ifield-assertion (eq f-12-4 #xA))
3775 (getter (get-memory-bit 16 (reg h-sb) (.sym BitBase16- offset -u8)))
3776 (setter (set-memory-bit 16 (reg h-sb) (.sym BitBase16- offset -u8) newval))
3777 )
3778 (define-derived-operand
3779 (name (.sym bit16- offset -16-SB-relative))
3780 (comment (.str "m16c dsp:16[sb] relative bit " xmode))
3781 (attrs (machine 16))
3782 (mode BI)
3783 (args ((.sym BitBase16- offset -u16)))
3784 (syntax (.str "${BitBase16-" offset "-u16}[sb]"))
3785 (base-ifield f-12-4)
3786 (encoding (+ (f-12-4 #xE) (.sym BitBase16- offset -u16)))
3787 (ifield-assertion (eq f-12-4 #xE))
3788 (getter (get-memory-bit 16 (reg h-sb) (.sym BitBase16- offset -u16)))
3789 (setter (set-memory-bit 16 (reg h-sb) (.sym BitBase16- offset -u16) newval))
3790 )
3791 (define-derived-operand
3792 (name (.sym bit16- offset -8-FB-relative))
3793 (comment (.str "m16c dsp:8[fb] relative bit " xmode))
3794 (attrs (machine 16))
3795 (mode BI)
3796 (args ((.sym BitBase16- offset -s8)))
3797 (syntax (.str "${BitBase16-" offset "-s8}[fb]"))
3798 (base-ifield f-12-4)
3799 (encoding (+ (f-12-4 #xB) (.sym BitBase16- offset -s8)))
3800 (ifield-assertion (eq f-12-4 #xB))
3801 (getter (get-memory-bit 16 (reg h-fb) (.sym BitBase16- offset -s8)))
3802 (setter (set-memory-bit 16 (reg h-fb) (.sym BitBase16- offset -s8) newval))
3803 )
3804 (define-derived-operand
3805 (name (.sym bit16- offset -8-An-relative))
3806 (comment (.str "m16c dsp:8[An] relative bit " xmode))
3807 (attrs (machine 16))
3808 (mode BI)
3809 (args (Bit16An (.sym Dsp- offset -u8)))
3810 (syntax (.str "${Dsp-" offset "-u8}[$Bit16An]"))
3811 (base-ifield f-12-4)
3812 (encoding (+ (f-12-2 2) (f-14-1 0) (.sym Dsp- offset -u8) Bit16An))
3813 (ifield-assertion (andif (eq f-12-2 2) (eq f-14-1 0)))
3814 (getter (get-memory-bit 16 (.sym Dsp- offset -u8) Bit16An))
3815 (setter (set-memory-bit 16 (.sym Dsp- offset -u8) Bit16An newval))
3816 )
3817 (define-derived-operand
3818 (name (.sym bit16- offset -16-An-relative))
3819 (comment (.str "m16c dsp:16[An] relative bit " xmode))
3820 (attrs (machine 16))
3821 (mode BI)
3822 (args (Bit16An (.sym Dsp- offset -u16)))
3823 (syntax (.str "${Dsp-" offset "-u16}[$Bit16An]"))
3824 (base-ifield f-12-4)
3825 (encoding (+ (f-12-2 3) (f-14-1 0) (.sym Dsp- offset -u16) Bit16An))
3826 (ifield-assertion (andif (eq f-12-2 3) (eq f-14-1 0)))
3827 (getter (get-memory-bit 16 (.sym Dsp- offset -u16) Bit16An))
3828 (setter (set-memory-bit 16 (.sym Dsp- offset -u16) Bit16An newval))
3829 )
3830 )
3831)
3832
3833(bit16-relative-operand 16)
3834
3835(define-pmacro (bit32-relative-operand offset group base1 base2)
3836 (begin
3837 (define-derived-operand
3838 (name (.sym bit32- offset -11-SB-relative- group))
3839 (comment "m32c bit,base:11[sb] relative bit")
3840 (attrs (machine 32))
3841 (mode BI)
3842 (args ((.sym BitBase32- offset -u11- group)))
3843 (syntax (.str "${BitBase32-" offset "-u11-" group "}[sb]"))
3844 (base-ifield (.sym f- base1 -12))
3845 (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -2) 2) (.sym BitBase32- offset -u11- group)))
3846 (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -2) 2)))
3847 (getter (get-memory-bit 32 (reg h-sb) (.sym BitBase32- offset -u11- group)))
3848 (setter (set-memory-bit 32 (reg h-sb) (.sym BitBase32- offset -u11- group) newval))
3849 )
3850 (define-derived-operand
3851 (name (.sym bit32- offset -19-SB-relative- group))
3852 (comment "m32c bit,base:19[sb] relative bit")
3853 (attrs (machine 32))
3854 (mode BI)
3855 (args ((.sym BitBase32- offset -u19- group)))
3856 (syntax (.str "${BitBase32-" offset "-u19-" group "}[sb]"))
3857 (base-ifield (.sym f- base1 -12))
3858 (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -2) 2) (.sym BitBase32- offset -u19- group)))
3859 (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -2) 2)))
3860 (getter (get-memory-bit 32 (reg h-sb) (.sym BitBase32- offset -u19- group)))
3861 (setter (set-memory-bit 32 (reg h-sb) (.sym BitBase32- offset -u19- group) newval))
3862 )
3863 (define-derived-operand
3864 (name (.sym bit32- offset -11-FB-relative- group))
3865 (comment "m32c bit,base:11[fb] relative bit")
3866 (attrs (machine 32))
3867 (mode BI)
3868 (args ((.sym BitBase32- offset -s11- group)))
3869 (syntax (.str "${BitBase32-" offset "-s11-" group "}[fb]"))
3870 (base-ifield (.sym f- base1 -12))
3871 (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -2) 3) (.sym BitBase32- offset -s11- group)))
3872 (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -2) 3)))
3873 (getter (get-memory-bit 32 (reg h-fb) (.sym BitBase32- offset -s11- group)))
3874 (setter (set-memory-bit 32 (reg h-fb) (.sym BitBase32- offset -s11- group) newval))
3875 )
3876 (define-derived-operand
3877 (name (.sym bit32- offset -19-FB-relative- group))
3878 (comment "m32c bit,base:19[fb] relative bit")
3879 (attrs (machine 32))
3880 (mode BI)
3881 (args ((.sym BitBase32- offset -s19- group)))
3882 (syntax (.str "${BitBase32-" offset "-s19-" group "}[fb]"))
3883 (base-ifield (.sym f- base1 -12))
3884 (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -2) 3) (.sym BitBase32- offset -s19- group)))
3885 (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -2) 3)))
3886 (getter (get-memory-bit 32 (reg h-fb) (.sym BitBase32- offset -s19- group)))
3887 (setter (set-memory-bit 32 (reg h-fb) (.sym BitBase32- offset -s19- group) newval))
3888 )
3889 (define-derived-operand
3890 (name (.sym bit32- offset -11-An-relative- group))
3891 (comment "m32c bit,base:11[An] relative bit")
3892 (attrs (machine 32))
3893 (mode BI)
3894 (args ((.sym BitBase32- offset -u11- group) (.sym Bit32An group)))
3895 (syntax (.str "${BitBase32-" offset "-u11-" group "}[$Bit32An" group "]"))
3896 (base-ifield (.sym f- base1 -12))
3897 (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -1) 0) (.sym BitBase32- offset -u11- group) (.sym Bit32An group)))
3898 (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -1) 0)))
3899 (getter (get-memory-bit 32 (.sym Bit32An group) (.sym BitBase32- offset -u11- group)))
3900 (setter (set-memory-bit 32 (.sym Bit32An group) (.sym BitBase32- offset -u11- group) newval))
3901 )
3902 (define-derived-operand
3903 (name (.sym bit32- offset -19-An-relative- group))
3904 (comment "m32c bit,base:19[An] relative bit")
3905 (attrs (machine 32))
3906 (mode BI)
3907 (args ((.sym BitBase32- offset -u19- group) (.sym Bit32An group)))
3908 (syntax (.str "${BitBase32-" offset "-u19-" group "}[$Bit32An" group "]"))
3909 (base-ifield (.sym f- base1 -12))
3910 (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -1) 0) (.sym BitBase32- offset -u19- group) (.sym Bit32An group)))
3911 (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -1) 0)))
3912 (getter (get-memory-bit 32 (.sym Bit32An group) (.sym BitBase32- offset -u19- group)))
3913 (setter (set-memory-bit 32 (.sym Bit32An group) (.sym BitBase32- offset -u19- group) newval))
3914 )
3915 (define-derived-operand
3916 (name (.sym bit32- offset -27-An-relative- group))
3917 (comment "m32c bit,base:27[An] relative bit")
3918 (attrs (machine 32))
3919 (mode BI)
3920 (args ((.sym BitBase32- offset -u27- group) (.sym Bit32An group)))
3921 (syntax (.str "${BitBase32-" offset "-u27-" group "}[$Bit32An" group "]"))
3922 (base-ifield (.sym f- base1 -12))
3923 (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -1) 0) (.sym BitBase32- offset -u27- group) (.sym Bit32An group)))
3924 (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -1) 0)))
3925 (getter (get-memory-bit 32 (.sym Bit32An group) (.sym BitBase32- offset -u27- group)))
3926 (setter (set-memory-bit 32 (.sym Bit32An group) (.sym BitBase32- offset -u27- group) newval))
3927 )
3928 )
3929)
3930
3931(bit32-relative-operand 16 Unprefixed 4 8)
3932(bit32-relative-operand 24 Prefixed 12 16)
3933
3934(define-derived-operand
3935 (name bit16-11-SB-relative-S)
3936 (comment "m16c bit,base:11[sb] relative bit")
3937 (attrs (machine 16))
3938 (mode BI)
3939 (args (BitBase16-8-u11-S))
3940 (syntax "${BitBase16-8-u11-S}[sb]")
3941 (base-ifield (.sym f-5-3))
3942 (encoding (+ BitBase16-8-u11-S))
3943; (ifield-assertion (#t))
3944 (getter (get-memory-bit 16 (reg h-sb) BitBase16-8-u11-S))
3945 (setter (set-memory-bit 16 (reg h-sb) BitBase16-8-u11-S newval))
3946)
3947
3948(define-derived-operand
3949 (name Rn16-push-S-derived)
3950 (comment "m16c r0[lh] for push,pop short version")
3951 (attrs (machine 16))
3952 (mode QI)
3953 (args (Rn16-push-S))
3954 (syntax "${Rn16-push-S}")
3955 (base-ifield (.sym f-4-1))
3956 (encoding (+ Rn16-push-S))
3957; (ifield-assertion (#t))
3958 (getter (trunc QI Rn16-push-S))
3959 (setter (set Rn16-push-S newval))
3960)
3961
3962(define-derived-operand
3963 (name An16-push-S-derived)
3964 (comment "m16c r0[lh] for push,pop short version")
3965 (attrs (machine 16))
3966 (mode HI)
3967 (args (An16-push-S))
3968 (syntax "${An16-push-S}")
3969 (base-ifield (.sym f-4-1))
3970 (encoding (+ An16-push-S))
3971; (ifield-assertion (#t))
3972 (getter (trunc QI An16-push-S))
3973 (setter (set An16-push-S newval))
3974)
3975
3976;-------------------------------------------------------------
3977; Absolute address
3978;-------------------------------------------------------------
3979
3980(define-pmacro (bit16-absolute offset)
3981 (begin
3982 (define-derived-operand
3983 (name (.sym bit16- offset -16-absolute))
3984 (comment "m16c absolute address")
3985 (attrs (machine 16))
3986 (mode BI)
3987 (args ((.sym BitBase16- offset -u16)))
3988 (syntax (.str "${BitBase16-" offset "-u16}"))
3989 (base-ifield f-12-4)
3990 (encoding (+ (f-12-4 #xF) (.sym BitBase16- offset -u16)))
3991 (ifield-assertion (eq f-12-4 #xF))
3992 (getter (get-memory-bit 16 0 (.sym BitBase16- offset -u16)))
3993 (setter (set-memory-bit 16 0 (.sym BitBase16- offset -u16) newval))
3994 )
3995 )
3996)
3997
3998(bit16-absolute 16)
3999
4000(define-pmacro (bit32-absolute offset group base1 base2)
4001 (begin
4002 (define-derived-operand
4003 (name (.sym bit32- offset -19-absolute- group))
4004 (comment "m32c absolute address bit")
4005 (attrs (machine 32))
4006 (mode BI)
4007 (args ((.sym BitBase32- offset -u19- group)))
4008 (syntax (.str "${BitBase32-" offset "-u19-" group "}"))
4009 (base-ifield (.sym f- base1 -12))
4010 (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 3) (.sym BitBase32- offset -u19- group)))
4011 (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 3)))
4012 (getter (get-memory-bit 32 0 (.sym BitBase32- offset -u19- group)))
4013 (setter (set-memory-bit 32 0 (.sym BitBase32- offset -u19- group) newval))
4014 )
4015 (define-derived-operand
4016 (name (.sym bit32- offset -27-absolute- group))
4017 (comment "m32c absolute address bit")
4018 (attrs (machine 32))
4019 (mode BI)
4020 (args ((.sym BitBase32- offset -u27- group)))
4021 (syntax (.str "${BitBase32-" offset "-u27-" group "}"))
4022 (base-ifield (.sym f- base1 -12))
4023 (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 2) (.sym BitBase32- offset -u27- group)))
4024 (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 2)))
4025 (getter (get-memory-bit 32 0 (.sym BitBase32- offset -u27- group)))
4026 (setter (set-memory-bit 32 0 (.sym BitBase32- offset -u27- group) newval))
4027 )
4028 )
4029)
4030
4031(bit32-absolute 16 Unprefixed 4 8)
4032(bit32-absolute 24 Prefixed 12 16)
4033
4034;-------------------------------------------------------------
4035; Destination operands for short fomat insns
4036;-------------------------------------------------------------
4037
4038(define-derived-operand
4039 (name dst16-3-S-R0l-direct-QI)
4040 (comment "m16c R0l direct QI")
4041 (attrs (machine 16))
4042 (mode QI)
4043 (args (R0l))
4044 (syntax "r0l")
4045 (base-ifield f-5-3)
4046 (encoding (+ (f-5-3 4)))
4047 (ifield-assertion (eq f-5-3 4))
4048 (getter (trunc QI R0l))
4049 (setter (set R0l newval))
4050)
4051(define-derived-operand
4052 (name dst16-3-S-R0h-direct-QI)
4053 (comment "m16c R0h direct QI")
4054 (attrs (machine 16))
4055 (mode QI)
4056 (args (R0h))
4057 (syntax "r0h")
4058 (base-ifield f-5-3)
4059 (encoding (+ (f-5-3 3)))
4060 (ifield-assertion (eq f-5-3 3))
4061 (getter (trunc QI R0h))
4062 (setter (set R0h newval))
4063)
4064(define-derived-operand
4065 (name dst16-3-S-8-8-SB-relative-QI)
4066 (comment "m16c SB relative QI")
4067 (attrs (machine 16))
4068 (mode QI)
4069 (args (Dsp-8-u8))
4070 (syntax "${Dsp-8-u8}[sb]")
4071 (base-ifield f-5-3)
4072 (encoding (+ (f-5-3 5) Dsp-8-u8))
4073 (ifield-assertion (eq f-5-3 5))
4074 (getter (mem16 QI (add Dsp-8-u8 (reg h-sb))))
4075 (setter (set (mem16 QI (add Dsp-8-u8 (reg h-sb))) newval))
4076)
4077(define-derived-operand
4078 (name dst16-3-S-8-8-FB-relative-QI)
4079 (comment "m16c FB relative QI")
4080 (attrs (machine 16))
4081 (mode QI)
4082 (args (Dsp-8-s8))
4083 (syntax "${Dsp-8-s8}[fb]")
4084 (base-ifield f-5-3)
4085 (encoding (+ (f-5-3 6) Dsp-8-s8))
4086 (ifield-assertion (eq f-5-3 6))
4087 (getter (mem16 QI (add Dsp-8-s8 (reg h-fb))))
4088 (setter (set (mem16 QI (add Dsp-8-s8 (reg h-fb))) newval))
4089)
4090(define-derived-operand
4091 (name dst16-3-S-8-16-absolute-QI)
4092 (comment "m16c absolute address QI")
4093 (attrs (machine 16))
4094 (mode QI)
4095 (args (Dsp-8-u16))
4096 (syntax "${Dsp-8-u16}")
4097 (base-ifield f-5-3)
4098 (encoding (+ (f-5-3 7) Dsp-8-u16))
4099 (ifield-assertion (eq f-5-3 7))
4100 (getter (mem16 QI Dsp-8-u16))
4101 (setter (set (mem16 QI Dsp-8-u16) newval))
4102)
4103(define-derived-operand
4104 (name dst16-3-S-16-8-SB-relative-QI)
4105 (comment "m16c SB relative QI")
4106 (attrs (machine 16))
4107 (mode QI)
4108 (args (Dsp-16-u8))
4109 (syntax "${Dsp-16-u8}[sb]")
4110 (base-ifield f-5-3)
4111 (encoding (+ (f-5-3 5) Dsp-16-u8))
4112 (ifield-assertion (eq f-5-3 5))
4113 (getter (mem16 QI (add Dsp-16-u8 (reg h-sb))))
4114 (setter (set (mem16 QI (add Dsp-16-u8 (reg h-sb))) newval))
4115)
4116(define-derived-operand
4117 (name dst16-3-S-16-8-FB-relative-QI)
4118 (comment "m16c FB relative QI")
4119 (attrs (machine 16))
4120 (mode QI)
4121 (args (Dsp-16-s8))
4122 (syntax "${Dsp-16-s8}[fb]")
4123 (base-ifield f-5-3)
4124 (encoding (+ (f-5-3 6) Dsp-16-s8))
4125 (ifield-assertion (eq f-5-3 6))
4126 (getter (mem16 QI (add Dsp-16-s8 (reg h-fb))))
4127 (setter (set (mem16 QI (add Dsp-16-s8 (reg h-fb))) newval))
4128)
4129(define-derived-operand
4130 (name dst16-3-S-16-16-absolute-QI)
4131 (comment "m16c absolute address QI")
4132 (attrs (machine 16))
4133 (mode QI)
4134 (args (Dsp-16-u16))
4135 (syntax "${Dsp-16-u16}")
4136 (base-ifield f-5-3)
4137 (encoding (+ (f-5-3 7) Dsp-16-u16))
4138 (ifield-assertion (eq f-5-3 7))
4139 (getter (mem16 QI Dsp-16-u16))
4140 (setter (set (mem16 QI Dsp-16-u16) newval))
4141)
4142(define-derived-operand
4143 (name srcdst16-r0l-r0h-S-derived)
4144 (comment "m16c r0l/r0h operand for short format insns")
4145 (attrs (machine 16))
4146 (mode SI)
4147 (args (SrcDst16-r0l-r0h-S-normal))
4148 (syntax "${SrcDst16-r0l-r0h-S-normal}")
4149 (base-ifield f-6-3)
4150 (encoding (+ (f-6-2 0) SrcDst16-r0l-r0h-S-normal))
4151 (ifield-assertion (eq f-6-2 0))
4152 (getter (trunc SI SrcDst16-r0l-r0h-S-normal))
4153 (setter ()) ; no setter
4154)
4155(define-derived-operand
4156 (name dst32-2-S-R0l-direct-QI)
4157 (comment "m32c R0l direct QI")
4158 (attrs (machine 32))
4159 (mode QI)
4160 (args (R0l))
4161 (syntax "r0l")
4162 (base-ifield f-2-2)
4163 (encoding (+ (f-2-2 0)))
4164 (ifield-assertion (eq f-2-2 0))
4165 (getter (trunc QI R0l))
4166 (setter (set R0l newval))
4167)
4168(define-derived-operand
4169 (name dst32-2-S-R0-direct-HI)
4170 (comment "m32c R0 direct HI")
4171 (attrs (machine 32))
4172 (mode HI)
4173 (args (R0))
4174 (syntax "r0")
4175 (base-ifield f-2-2)
4176 (encoding (+ (f-2-2 0)))
4177 (ifield-assertion (eq f-2-2 0))
4178 (getter (trunc HI R0))
4179 (setter (set R0 newval))
4180)
4181(define-derived-operand
4182 (name dst32-1-S-A0-direct-HI)
4183 (comment "m32c A0 direct HI")
4184 (attrs (machine 32))
4185 (mode HI)
4186 (args (A0))
4187 (syntax "a0")
4188 (base-ifield f-7-1)
4189 (encoding (+ (f-7-1 0)))
4190 (ifield-assertion (eq f-7-1 0))
4191 (getter (trunc HI A0))
4192 (setter (set A0 newval))
4193)
4194(define-derived-operand
4195 (name dst32-1-S-A1-direct-HI)
4196 (comment "m32c A1 direct HI")
4197 (attrs (machine 32))
4198 (mode HI)
4199 (args (A1))
4200 (syntax "a1")
4201 (base-ifield f-7-1)
4202 (encoding (+ (f-7-1 1)))
4203 (ifield-assertion (eq f-7-1 1))
4204 (getter (trunc HI A1))
4205 (setter (set A1 newval))
4206)
4207(define-pmacro (dst32-2-S-operands xmode)
4208 (begin
4209 (define-derived-operand
4210 (name (.sym dst32-2-S-8-SB-relative- xmode))
4211 (comment "m32c SB relative for short binary insns")
4212 (attrs (machine 32))
4213 (mode xmode)
4214 (args (Dsp-8-u8))
4215 (syntax "${Dsp-8-u8}[sb]")
4216 (base-ifield f-2-2)
4217 (encoding (+ (f-2-2 2) Dsp-8-u8))
4218 (ifield-assertion (eq f-2-2 2))
4219 (getter (c-call xmode (.str "operand_getter_" xmode) sb Dsp-8-u8))
4220 (setter (c-call DFLT (.str "operand_setter_" xmode) newval sb Dsp-8-u8))
4221; (getter (mem32 xmode (add Dsp-8-u8 (reg h-sb))))
4222; (setter (set (mem32 xmode (add Dsp-8-u8 (reg h-sb))) newval))
4223 )
4224 (define-derived-operand
4225 (name (.sym dst32-2-S-8-FB-relative- xmode))
4226 (comment "m32c FB relative for short binary insns")
4227 (attrs (machine 32))
4228 (mode xmode)
4229 (args (Dsp-8-s8))
4230 (syntax "${Dsp-8-s8}[fb]")
4231 (base-ifield f-2-2)
4232 (encoding (+ (f-2-2 3) Dsp-8-s8))
4233 (ifield-assertion (eq f-2-2 3))
4234 (getter (c-call xmode (.str "operand_getter_" xmode) fb Dsp-8-s8))
4235 (setter (c-call DFLT (.str "operand_setter_" xmode) newval fb Dsp-8-s8))
4236; (getter (mem32 xmode (add Dsp-8-s8 (reg h-fb))))
4237; (setter (set (mem32 xmode (add Dsp-8-s8 (reg h-fb))) newval))
4238 )
4239 (define-derived-operand
4240 (name (.sym dst32-2-S-16-absolute- xmode))
4241 (comment "m32c absolute address for short binary insns")
4242 (attrs (machine 32))
4243 (mode xmode)
4244 (args (Dsp-8-u16))
4245 (syntax "${Dsp-8-u16}")
4246 (base-ifield f-2-2)
4247 (encoding (+ (f-2-2 1) Dsp-8-u16))
4248 (ifield-assertion (eq f-2-2 1))
4249 (getter (c-call xmode (.str "operand_getter_" xmode) (const 0) Dsp-8-u16))
4250 (setter (c-call DFLT (.str "operand_setter_" xmode) newval (const 0) Dsp-8-u16))
4251; (getter (mem32 xmode Dsp-8-u16))
4252; (setter (set (mem32 xmode Dsp-8-u16) newval))
4253 )
4254; (define-derived-operand
4255; (name (.sym dst32-2-S-8-SB-relative-indirect- xmode))
4256; (comment "m32c SB relative for short binary insns")
4257; (attrs (machine 32))
4258; (mode xmode)
4259; (args (Dsp-16-u8))
4260; (syntax "[${Dsp-16-u8}[sb]]")
4261; (base-ifield f-10-2)
4262; (encoding (+ (f-10-2 2) Dsp-16-u8))
4263; (ifield-assertion (eq f-10-2 2))
4264; (getter (mem32 xmode (indirect-addr (add Dsp-16-u8 (reg h-sb)))))
4265; (setter (set (mem32 xmode (indirect-addr (add Dsp-16-u8 (reg h-sb)))) newval))
4266; )
4267; (define-derived-operand
4268; (name (.sym dst32-2-S-8-FB-relative-indirect- xmode))
4269; (comment "m32c FB relative for short binary insns")
4270; (attrs (machine 32))
4271; (mode xmode)
4272; (args (Dsp-16-s8))
4273; (syntax "[${Dsp-16-s8}[fb]]")
4274; (base-ifield f-10-2)
4275; (encoding (+ (f-10-2 3) Dsp-16-s8))
4276; (ifield-assertion (eq f-10-2 3))
4277; (getter (mem32 xmode (indirect-addr (add Dsp-16-s8 (reg h-fb)))))
4278; (setter (set (mem32 xmode (indirect-addr (add Dsp-16-s8 (reg h-fb)))) newval))
4279; )
4280; (define-derived-operand
4281; (name (.sym dst32-2-S-16-absolute-indirect- xmode))
4282; (comment "m32c absolute address for short binary insns")
4283; (attrs (machine 32))
4284; (mode xmode)
4285; (args (Dsp-16-u16))
4286; (syntax "[${Dsp-16-u16}]")
4287; (base-ifield f-10-2)
4288; (encoding (+ (f-10-2 1) Dsp-16-u16))
4289; (ifield-assertion (eq f-10-2 1))
4290; (getter (mem32 xmode (indirect-addr Dsp-16-u16)))
4291; (setter (set (mem32 xmode (indirect-addr Dsp-16-u16)) newval))
4292; )
4293 )
4294)
4295
4296(dst32-2-S-operands QI)
4297(dst32-2-S-operands HI)
4298(dst32-2-S-operands SI)
4299
4300;=============================================================
4301; Anyof operands
4302;-------------------------------------------------------------
4303; Source operands with no additional fields
4304;-------------------------------------------------------------
4305
4306(define-pmacro (src16-basic-operand xmode)
4307 (begin
4308 (define-anyof-operand
4309 (name (.sym src16-basic- xmode))
4310 (comment (.str "m16c source operand of size " xmode " with no additional fields"))
4311 (attrs (machine 16))
4312 (mode xmode)
4313 (choices
4314 (.sym src16-Rn-direct- xmode)
4315 (.sym src16-An-direct- xmode)
4316 (.sym src16-An-indirect- xmode)
4317 )
4318 )
4319 )
4320)
4321(src16-basic-operand QI)
4322(src16-basic-operand HI)
4323
4324(define-pmacro (src32-basic-operand xmode)
4325 (begin
4326 (define-anyof-operand
4327 (name (.sym src32-basic-Unprefixed- xmode))
4328 (comment (.str "m32c destination operand of size " xmode " with no additional fields"))
4329 (attrs (machine 32))
4330 (mode xmode)
4331 (choices
4332 (.sym src32-Rn-direct-Unprefixed- xmode)
4333 (.sym src32-An-direct-Unprefixed- xmode)
4334 (.sym src32-An-indirect-Unprefixed- xmode)
4335 )
4336 )
4337 (define-anyof-operand
4338 (name (.sym src32-basic-Prefixed- xmode))
4339 (comment (.str "m32c destination operand of size " xmode " with no additional fields"))
4340 (attrs (machine 32))
4341 (mode xmode)
4342 (choices
4343 (.sym src32-Rn-direct-Prefixed- xmode)
4344 (.sym src32-An-direct-Prefixed- xmode)
4345 (.sym src32-An-indirect-Prefixed- xmode)
4346 )
4347 )
4348; (define-anyof-operand
4349; (name (.sym src32-basic-indirect- xmode))
4350; (comment (.str "m32c destination operand of size " xmode " indirect with no additional fields"))
4351; (attrs (machine 32))
4352; (mode xmode)
4353; (choices
4354; (.sym src32-An-indirect-indirect- xmode)
4355; )
4356; )
4357 )
4358)
4359
4360(src32-basic-operand QI)
4361(src32-basic-operand HI)
4362(src32-basic-operand SI)
4363
4364(define-anyof-operand
4365 (name src32-basic-ExtPrefixed-QI)
4366 (comment "m32c source operand of size QI with no additional fields")
4367 (attrs (machine 32))
4368 (mode QI)
4369 (choices
4370 src32-Rn-direct-Prefixed-QI
4371 src32-An-indirect-Prefixed-QI
4372 )
4373)
4374
4375;-------------------------------------------------------------
4376; Source operands with additional fields at offset 16 bits
4377;-------------------------------------------------------------
4378
4379(define-pmacro (src16-16-operand xmode)
4380 (begin
4381 (define-anyof-operand
4382 (name (.sym src16-16-8- xmode))
4383 (comment (.str "m16c source operand of size " xmode " with additional 8 bit fields at offset 16"))
4384 (attrs (machine 16))
4385 (mode xmode)
4386 (choices
4387 (.sym src16-16-8-An-relative- xmode)
4388 (.sym src16-16-8-SB-relative- xmode)
4389 (.sym src16-16-8-FB-relative- xmode)
4390 )
4391 )
4392 (define-anyof-operand
4393 (name (.sym src16-16-16- xmode))
4394 (comment (.str "m16c source operand of size " xmode " with additional 16 bit fields at offset 16"))
4395 (attrs (machine 16))
4396 (mode xmode)
4397 (choices
4398 (.sym src16-16-16-An-relative- xmode)
4399 (.sym src16-16-16-SB-relative- xmode)
4400 (.sym src16-16-16-absolute- xmode)
4401 )
4402 )
4403 )
4404)
4405(src16-16-operand QI)
4406(src16-16-operand HI)
4407
4408(define-pmacro (src32-16-operand xmode)
4409 (begin
4410 (define-anyof-operand
4411 (name (.sym src32-16-8-Unprefixed- xmode))
4412 (comment (.str "m32c source operand of size " xmode " with additional 8 bit fields at offset 16"))
4413 (attrs (machine 32))
4414 (mode xmode)
4415 (choices
4416 (.sym src32-16-8-An-relative-Unprefixed- xmode)
4417 (.sym src32-16-8-SB-relative-Unprefixed- xmode)
4418 (.sym src32-16-8-FB-relative-Unprefixed- xmode)
4419 )
4420 )
4421 (define-anyof-operand
4422 (name (.sym src32-16-16-Unprefixed- xmode))
4423 (comment (.str "m32c source operand of size " xmode " with additional 16 bit fields at offset 16"))
4424 (attrs (machine 32))
4425 (mode xmode)
4426 (choices
4427 (.sym src32-16-16-An-relative-Unprefixed- xmode)
4428 (.sym src32-16-16-SB-relative-Unprefixed- xmode)
4429 (.sym src32-16-16-FB-relative-Unprefixed- xmode)
4430 (.sym src32-16-16-absolute-Unprefixed- xmode)
4431 )
4432 )
4433 (define-anyof-operand
4434 (name (.sym src32-16-24-Unprefixed- xmode))
4435 (comment (.str "m32c source operand of size " xmode " with additional 24 bit fields at offset 16"))
4436 (attrs (machine 32))
4437 (mode xmode)
4438 (choices
4439 (.sym src32-16-24-An-relative-Unprefixed- xmode)
4440 (.sym src32-16-24-absolute-Unprefixed- xmode)
4441 )
4442 )
4443 )
4444)
4445
4446(src32-16-operand QI)
4447(src32-16-operand HI)
4448(src32-16-operand SI)
4449
4450;-------------------------------------------------------------
4451; Source operands with additional fields at offset 24 bits
4452;-------------------------------------------------------------
4453
4454(define-pmacro (src-24-operand group xmode)
4455 (begin
4456 (define-anyof-operand
4457 (name (.sym src32-24-8- group - xmode))
4458 (comment (.str "m32c source operand of size " xmode " with additional 8 bit fields at offset 24"))
4459 (attrs (machine 32))
4460 (mode xmode)
4461 (choices
4462 (.sym src32-24-8-An-relative- group - xmode)
4463 (.sym src32-24-8-SB-relative- group - xmode)
4464 (.sym src32-24-8-FB-relative- group - xmode)
4465 )
4466 )
4467 (define-anyof-operand
4468 (name (.sym src32-24-16- group - xmode))
4469 (comment (.str "m32c source operand of size " xmode " with additional 16 bit fields at offset 16"))
4470 (attrs (machine 32))
4471 (mode xmode)
4472 (choices
4473 (.sym src32-24-16-An-relative- group - xmode)
4474 (.sym src32-24-16-SB-relative- group - xmode)
4475 (.sym src32-24-16-FB-relative- group - xmode)
4476 (.sym src32-24-16-absolute- group - xmode)
4477 )
4478 )
4479 (define-anyof-operand
4480 (name (.sym src32-24-24- group - xmode))
4481 (comment (.str "m32c source operand of size " xmode " with additional 24 bit fields at offset 16"))
4482 (attrs (machine 32))
4483 (mode xmode)
4484 (choices
4485 (.sym src32-24-24-An-relative- group - xmode)
4486 (.sym src32-24-24-absolute- group - xmode)
4487 )
4488 )
4489 )
4490)
4491
4492(src-24-operand Prefixed QI)
4493(src-24-operand Prefixed HI)
4494(src-24-operand Prefixed SI)
4495
4496(define-pmacro (src-24-indirect-operand xmode)
4497 (begin
4498; (define-anyof-operand
4499; (name (.sym src32-24-8-indirect- xmode))
4500; (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
4501; (attrs (machine 32))
4502; (mode xmode)
4503; (choices
4504; (.sym src32-24-8-An-relative-indirect- xmode)
4505; (.sym src32-24-8-SB-relative-indirect- xmode)
4506; (.sym src32-24-8-FB-relative-indirect- xmode)
4507; )
4508; )
4509; (define-anyof-operand
4510; (name (.sym src32-24-16-indirect- xmode))
4511; (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
4512; (attrs (machine 32))
4513; (mode xmode)
4514; (choices
4515; (.sym src32-24-16-An-relative-indirect- xmode)
4516; (.sym src32-24-16-SB-relative-indirect- xmode)
4517; (.sym src32-24-16-FB-relative-indirect- xmode)
4518; )
4519; )
4520; (define-anyof-operand
4521; (name (.sym src32-24-24-indirect- xmode))
4522; (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
4523; (attrs (machine 32))
4524; (mode xmode)
4525; (choices
4526; (.sym src32-24-24-An-relative-indirect- xmode)
4527; )
4528; )
4529; (define-anyof-operand
4530; (name (.sym src32-24-16-absolute-indirect- xmode))
4531; (comment (.str "m32c source operand of size " xmode " 16 bit absolute indirect"))
4532; (attrs (machine 32))
4533; (mode xmode)
4534; (choices
4535; (.sym src32-24-16-absolute-indirect-derived- xmode)
4536; )
4537; )
4538; (define-anyof-operand
4539; (name (.sym src32-24-24-absolute-indirect- xmode))
4540; (comment (.str "m32c source operand of size " xmode " 24 bit absolute indirect"))
4541; (attrs (machine 32))
4542; (mode xmode)
4543; (choices
4544; (.sym src32-24-24-absolute-indirect-derived- xmode)
4545; )
4546; )
4547 )
4548)
4549
4550; (src-24-indirect-operand QI)
4551; (src-24-indirect-operand HI)
4552; (src-24-indirect-operand SI)
4553
4554;-------------------------------------------------------------
4555; Destination operands with no additional fields
4556;-------------------------------------------------------------
4557
4558(define-pmacro (dst16-basic-operand xmode)
4559 (begin
4560 (define-anyof-operand
4561 (name (.sym dst16-basic- xmode))
4562 (comment (.str "m16c destination operand of size " xmode " with no additional fields"))
4563 (attrs (machine 16))
4564 (mode xmode)
4565 (choices
4566 (.sym dst16-Rn-direct- xmode)
4567 (.sym dst16-An-direct- xmode)
4568 (.sym dst16-An-indirect- xmode)
4569 )
4570 )
4571 )
4572)
4573
4574(dst16-basic-operand QI)
4575(dst16-basic-operand HI)
4576(dst16-basic-operand SI)
4577
4578(define-pmacro (dst32-basic-operand xmode)
4579 (begin
4580 (define-anyof-operand
4581 (name (.sym dst32-basic-Unprefixed- xmode))
4582 (comment (.str "m32c destination operand of size " xmode " with no additional fields"))
4583 (attrs (machine 32))
4584 (mode xmode)
4585 (choices
4586 (.sym dst32-Rn-direct-Unprefixed- xmode)
4587 (.sym dst32-An-direct-Unprefixed- xmode)
4588 (.sym dst32-An-indirect-Unprefixed- xmode)
4589 )
4590 )
4591 (define-anyof-operand
4592 (name (.sym dst32-basic-Prefixed- xmode))
4593 (comment (.str "m32c destination operand of size " xmode " with no additional fields"))
4594 (attrs (machine 32))
4595 (mode xmode)
4596 (choices
4597 (.sym dst32-Rn-direct-Prefixed- xmode)
4598 (.sym dst32-An-direct-Prefixed- xmode)
4599 (.sym dst32-An-indirect-Prefixed- xmode)
4600 )
4601 )
4602 )
4603)
4604
4605(dst32-basic-operand QI)
4606(dst32-basic-operand HI)
4607(dst32-basic-operand SI)
4608
4609;-------------------------------------------------------------
4610; Destination operands with possible additional fields at offset 16 bits
4611;-------------------------------------------------------------
4612
4613(define-pmacro (dst16-16-operand xmode)
4614 (begin
4615 (define-anyof-operand
4616 (name (.sym dst16-16- xmode))
4617 (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 16"))
4618 (attrs (machine 16))
4619 (mode xmode)
4620 (choices
4621 (.sym dst16-Rn-direct- xmode)
4622 (.sym dst16-An-direct- xmode)
4623 (.sym dst16-An-indirect- xmode)
4624 (.sym dst16-16-8-An-relative- xmode)
4625 (.sym dst16-16-16-An-relative- xmode)
4626 (.sym dst16-16-8-SB-relative- xmode)
4627 (.sym dst16-16-16-SB-relative- xmode)
4628 (.sym dst16-16-8-FB-relative- xmode)
4629 (.sym dst16-16-16-absolute- xmode)
4630 )
4631 )
4632 (define-anyof-operand
4633 (name (.sym dst16-16-8- xmode))
4634 (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 16"))
4635 (attrs (machine 16))
4636 (mode xmode)
4637 (choices
4638 (.sym dst16-16-8-An-relative- xmode)
4639 (.sym dst16-16-8-SB-relative- xmode)
4640 (.sym dst16-16-8-FB-relative- xmode)
4641 )
4642 )
4643 (define-anyof-operand
4644 (name (.sym dst16-16-16- xmode))
4645 (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 16"))
4646 (attrs (machine 16))
4647 (mode xmode)
4648 (choices
4649 (.sym dst16-16-16-An-relative- xmode)
4650 (.sym dst16-16-16-SB-relative- xmode)
4651 (.sym dst16-16-16-absolute- xmode)
4652 )
4653 )
4654 )
4655)
4656
4657(dst16-16-operand QI)
4658(dst16-16-operand HI)
4659(dst16-16-operand SI)
4660
4661(define-anyof-operand
4662 (name dst16-16-Ext-QI)
4663 (comment "m16c destination operand of size QI for 'ext' insns with additional fields at offset 16")
4664 (attrs (machine 16))
4665 (mode QI)
4666 (choices
4667 dst16-Rn-direct-Ext-QI
4668 dst16-An-indirect-Ext-QI
4669 dst16-16-8-An-relative-Ext-QI
4670 dst16-16-16-An-relative-Ext-QI
4671 dst16-16-8-SB-relative-Ext-QI
4672 dst16-16-16-SB-relative-Ext-QI
4673 dst16-16-8-FB-relative-Ext-QI
4674 dst16-16-16-absolute-Ext-QI
4675 )
4676)
4677
4678(define-derived-operand
4679 (name dst16-An-indirect-Mova-HI)
4680 (comment "m16c addressof An indirect destination HI")
4681 (attrs (ISA m16c))
4682 (mode HI)
4683 (args (Dst16An))
4684 (syntax "[$Dst16An]")
4685 (base-ifield f-12-4)
4686 (encoding (+ (f-12-2 1) (f-14-1 1) Dst16An))
4687 (ifield-assertion
4688 (andif (eq f-12-2 1) (eq f-14-1 1)))
4689 (getter Dst16An)
4690 (setter (nop))
4691 )
4692
4693(define-derived-operand
4694 (name dst16-16-8-An-relative-Mova-HI)
4695 (comment
4696 "m16c addressof dsp:8[An] relative destination HI")
4697 (attrs (ISA m16c))
4698 (mode HI)
4699 (args (Dst16An Dsp-16-u8))
4700 (syntax "${Dsp-16-u8}[$Dst16An]")
4701 (base-ifield f-12-4)
4702 (encoding
4703 (+ (f-12-2 2) (f-14-1 0) Dsp-16-u8 Dst16An))
4704 (ifield-assertion
4705 (andif (eq f-12-2 2) (eq f-14-1 0)))
4706 (getter (add Dsp-16-u8 Dst16An))
4707 (setter (nop))
4708)
4709(define-derived-operand
4710 (name dst16-16-16-An-relative-Mova-HI)
4711 (comment
4712 "m16c addressof dsp:16[An] relative destination HI")
4713 (attrs (ISA m16c))
4714 (mode HI)
4715 (args (Dst16An Dsp-16-u16))
4716 (syntax "${Dsp-16-u16}[$Dst16An]")
4717 (base-ifield f-12-4)
4718 (encoding
4719 (+ (f-12-2 3) (f-14-1 0) Dsp-16-u16 Dst16An))
4720 (ifield-assertion
4721 (andif (eq f-12-2 3) (eq f-14-1 0)))
4722 (getter (add Dsp-16-u16 Dst16An))
4723 (setter (nop))
4724 )
4725(define-derived-operand
4726 (name dst16-16-8-SB-relative-Mova-HI)
4727 (comment
4728 "m16c addressof dsp:8[sb] relative destination HI")
4729 (attrs (ISA m16c))
4730 (mode HI)
4731 (args (Dsp-16-u8))
4732 (syntax "${Dsp-16-u8}[sb]")
4733 (base-ifield f-12-4)
4734 (encoding (+ (f-12-4 10) Dsp-16-u8))
4735 (ifield-assertion (eq f-12-4 10))
4736 (getter (add Dsp-16-u8 (reg h-sb)))
4737 (setter (nop))
4738)
4739(define-derived-operand
4740 (name dst16-16-16-SB-relative-Mova-HI)
4741 (comment
4742 "m16c addressof dsp:16[sb] relative destination HI")
4743 (attrs (ISA m16c))
4744 (mode HI)
4745 (args (Dsp-16-u16))
4746 (syntax "${Dsp-16-u16}[sb]")
4747 (base-ifield f-12-4)
4748 (encoding (+ (f-12-4 14) Dsp-16-u16))
4749 (ifield-assertion (eq f-12-4 14))
4750 (getter (add Dsp-16-u16 (reg h-sb)))
4751 (setter (nop))
4752 )
4753(define-derived-operand
4754 (name dst16-16-8-FB-relative-Mova-HI)
4755 (comment
4756 "m16c addressof dsp:8[fb] relative destination HI")
4757 (attrs (ISA m16c))
4758 (mode HI)
4759 (args (Dsp-16-s8))
4760 (syntax "${Dsp-16-s8}[fb]")
4761 (base-ifield f-12-4)
4762 (encoding (+ (f-12-4 11) Dsp-16-s8))
4763 (ifield-assertion (eq f-12-4 11))
4764 (getter (add Dsp-16-s8 (reg h-fb)))
4765 (setter (nop))
4766 )
4767(define-derived-operand
4768 (name dst16-16-16-absolute-Mova-HI)
4769 (comment "m16c addressof absolute address HI")
4770 (attrs (ISA m16c))
4771 (mode HI)
4772 (args (Dsp-16-u16))
4773 (syntax "${Dsp-16-u16}")
4774 (base-ifield f-12-4)
4775 (encoding (+ (f-12-4 15) Dsp-16-u16))
4776 (ifield-assertion (eq f-12-4 15))
4777 (getter Dsp-16-u16)
4778 (setter (nop))
4779 )
4780
4781(define-anyof-operand
4782 (name dst16-16-Mova-HI)
4783 (comment "m16c addressof destination operand of size HI with additional fields at offset 16")
4784 (attrs (machine 16))
4785 (mode HI)
4786 (choices
4787 dst16-An-indirect-Mova-HI
4788 dst16-16-8-An-relative-Mova-HI
4789 dst16-16-16-An-relative-Mova-HI
4790 dst16-16-8-SB-relative-Mova-HI
4791 dst16-16-16-SB-relative-Mova-HI
4792 dst16-16-8-FB-relative-Mova-HI
4793 dst16-16-16-absolute-Mova-HI
4794 )
4795)
4796
4797(define-derived-operand
4798 (name dst32-An-indirect-Unprefixed-Mova-SI)
4799 (comment "m32c addressof An indirect destination SI")
4800 (attrs (ISA m32c))
4801 (mode SI)
4802 (args (Dst32AnUnprefixed))
4803 (syntax "[$Dst32AnUnprefixed]")
4804 (base-ifield f-4-6)
4805 (encoding
4806 (+ (f-4-3 0) (f-8-1 0) Dst32AnUnprefixed))
4807 (ifield-assertion
4808 (andif (eq f-4-3 0) (eq f-8-1 0)))
4809 (getter Dst32AnUnprefixed)
4810 (setter (nop))
4811 )
4812
4813(define-derived-operand
4814 (name dst32-16-8-An-relative-Unprefixed-Mova-SI)
4815 (comment "m32c addressof dsp:8[An] relative destination SI")
4816 (attrs (ISA m32c))
4817 (mode SI)
4818 (args (Dst32AnUnprefixed Dsp-16-u8))
4819 (syntax "${Dsp-16-u8}[$Dst32AnUnprefixed]")
4820 (base-ifield f-4-6)
4821 (encoding
4822 (+ (f-4-3 1)
4823 (f-8-1 0)
4824 Dsp-16-u8
4825 Dst32AnUnprefixed))
4826 (ifield-assertion
4827 (andif (eq f-4-3 1) (eq f-8-1 0)))
4828 (getter (add Dsp-16-u8 Dst32AnUnprefixed))
4829 (setter (nop))
4830)
4831
4832(define-derived-operand
4833 (name dst32-16-16-An-relative-Unprefixed-Mova-SI)
4834 (comment
4835 "m32c addressof dsp:16[An] relative destination SI")
4836 (attrs (ISA m32c))
4837 (mode SI)
4838 (args (Dst32AnUnprefixed Dsp-16-u16))
4839 (syntax "${Dsp-16-u16}[$Dst32AnUnprefixed]")
4840 (base-ifield f-4-6)
4841 (encoding
4842 (+ (f-4-3 2)
4843 (f-8-1 0)
4844 Dsp-16-u16
4845 Dst32AnUnprefixed))
4846 (ifield-assertion
4847 (andif (eq f-4-3 2) (eq f-8-1 0)))
4848 (getter (add Dsp-16-u16 Dst32AnUnprefixed))
4849 (setter (nop))
4850 )
4851
4852(define-derived-operand
4853 (name dst32-16-24-An-relative-Unprefixed-Mova-SI)
4854 (comment "addressof m32c dsp:16[An] relative destination SI")
4855 (attrs (ISA m32c))
4856 (mode SI)
4857 (args (Dst32AnUnprefixed Dsp-16-u24))
4858 (syntax "${Dsp-16-u24}[$Dst32AnUnprefixed]")
4859 (base-ifield f-4-6)
4860 (encoding
4861 (+ (f-4-3 3)
4862 (f-8-1 0)
4863 Dsp-16-u24
4864 Dst32AnUnprefixed))
4865 (ifield-assertion
4866 (andif (eq f-4-3 3) (eq f-8-1 0)))
4867 (getter (add Dsp-16-u24 Dst32AnUnprefixed))
4868 (setter (nop))
4869 )
4870
4871(define-derived-operand
4872 (name dst32-16-8-SB-relative-Unprefixed-Mova-SI)
4873 (comment "m32c addressof dsp:8[sb] relative destination SI")
4874 (attrs (ISA m32c))
4875 (mode SI)
4876 (args (Dsp-16-u8))
4877 (syntax "${Dsp-16-u8}[sb]")
4878 (base-ifield f-4-6)
4879 (encoding (+ (f-4-3 1) (f-8-2 2) Dsp-16-u8))
4880 (ifield-assertion
4881 (andif (eq f-4-3 1) (eq f-8-2 2)))
4882 (getter (add Dsp-16-u8 (reg h-sb)))
4883 (setter (nop))
4884 )
4885
4886(define-derived-operand
4887 (name dst32-16-16-SB-relative-Unprefixed-Mova-SI)
4888 (comment "m32c addressof dsp:16[sb] relative destination SI")
4889 (attrs (ISA m32c))
4890 (mode SI)
4891 (args (Dsp-16-u16))
4892 (syntax "${Dsp-16-u16}[sb]")
4893 (base-ifield f-4-6)
4894 (encoding (+ (f-4-3 2) (f-8-2 2) Dsp-16-u16))
4895 (ifield-assertion
4896 (andif (eq f-4-3 2) (eq f-8-2 2)))
4897 (getter (add Dsp-16-u16 (reg h-sb)))
4898 (setter (nop))
4899 )
4900
4901(define-derived-operand
4902 (name dst32-16-8-FB-relative-Unprefixed-Mova-SI)
4903 (comment "m32c addressof dsp:8[fb] relative destination SI")
4904 (attrs (ISA m32c))
4905 (mode SI)
4906 (args (Dsp-16-s8))
4907 (syntax "${Dsp-16-s8}[fb]")
4908 (base-ifield f-4-6)
4909 (encoding (+ (f-4-3 1) (f-8-2 3) Dsp-16-s8))
4910 (ifield-assertion
4911 (andif (eq f-4-3 1) (eq f-8-2 3)))
4912 (getter (add Dsp-16-s8 (reg h-fb)))
4913 (setter (nop))
4914 )
4915
4916(define-derived-operand
4917 (name dst32-16-16-FB-relative-Unprefixed-Mova-SI)
4918 (comment "m32c addressof dsp:16[fb] relative destination SI")
4919 (attrs (ISA m32c))
4920 (mode SI)
4921 (args (Dsp-16-s16))
4922 (syntax "${Dsp-16-s16}[fb]")
4923 (base-ifield f-4-6)
4924 (encoding (+ (f-4-3 2) (f-8-2 3) Dsp-16-s16))
4925 (ifield-assertion
4926 (andif (eq f-4-3 2) (eq f-8-2 3)))
4927 (getter (add Dsp-16-s16 (reg h-fb)))
4928 (setter (nop))
4929 )
4930
4931(define-derived-operand
4932 (name dst32-16-16-absolute-Unprefixed-Mova-SI)
4933 (comment "m32c addressof absolute address SI") (attrs (ISA m32c))
4934 (mode SI)
4935 (args (Dsp-16-u16))
4936 (syntax "${Dsp-16-u16}")
4937 (base-ifield f-4-6)
4938 (encoding (+ (f-4-3 3) (f-8-2 3) Dsp-16-u16))
4939 (ifield-assertion
4940 (andif (eq f-4-3 3) (eq f-8-2 3)))
4941 (getter Dsp-16-u16)
4942 (setter (nop))
4943 )
4944
4945(define-derived-operand
4946 (name dst32-16-24-absolute-Unprefixed-Mova-SI)
4947 (comment "m32c addressof absolute address SI") (attrs (ISA m32c))
4948 (mode SI)
4949 (args (Dsp-16-u24))
4950 (syntax "${Dsp-16-u24}")
4951 (base-ifield f-4-6)
4952 (encoding (+ (f-4-3 3) (f-8-2 2) Dsp-16-u24))
4953 (ifield-assertion
4954 (andif (eq f-4-3 3) (eq f-8-2 2)))
4955 (getter Dsp-16-u24)
4956 (setter (nop))
4957 )
4958
4959(define-anyof-operand
4960 (name dst32-16-Unprefixed-Mova-SI)
4961 (comment
4962 "m32c addressof destination operand of size SI with additional fields at offset 16")
4963 (attrs (ISA m32c))
4964 (mode SI)
4965 (choices
4966 dst32-An-indirect-Unprefixed-Mova-SI
4967 dst32-16-8-An-relative-Unprefixed-Mova-SI
4968 dst32-16-16-An-relative-Unprefixed-Mova-SI
4969 dst32-16-24-An-relative-Unprefixed-Mova-SI
4970 dst32-16-8-SB-relative-Unprefixed-Mova-SI
4971 dst32-16-16-SB-relative-Unprefixed-Mova-SI
4972 dst32-16-8-FB-relative-Unprefixed-Mova-SI
4973 dst32-16-16-FB-relative-Unprefixed-Mova-SI
4974 dst32-16-16-absolute-Unprefixed-Mova-SI
4975 dst32-16-24-absolute-Unprefixed-Mova-SI))
4976
4977(define-pmacro (dst32-16-operand xmode)
4978 (begin
4979 (define-anyof-operand
4980 (name (.sym dst32-16-Unprefixed- xmode))
4981 (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 16"))
4982 (attrs (machine 32))
4983 (mode xmode)
4984 (choices
4985 (.sym dst32-Rn-direct-Unprefixed- xmode)
4986 (.sym dst32-An-direct-Unprefixed- xmode)
4987 (.sym dst32-An-indirect-Unprefixed- xmode)
4988 (.sym dst32-16-8-An-relative-Unprefixed- xmode)
4989 (.sym dst32-16-16-An-relative-Unprefixed- xmode)
4990 (.sym dst32-16-24-An-relative-Unprefixed- xmode)
4991 (.sym dst32-16-8-SB-relative-Unprefixed- xmode)
4992 (.sym dst32-16-16-SB-relative-Unprefixed- xmode)
4993 (.sym dst32-16-8-FB-relative-Unprefixed- xmode)
4994 (.sym dst32-16-16-FB-relative-Unprefixed- xmode)
4995 (.sym dst32-16-16-absolute-Unprefixed- xmode)
4996 (.sym dst32-16-24-absolute-Unprefixed- xmode)
4997 )
4998 )
4999 (define-anyof-operand
5000 (name (.sym dst32-16-8-Unprefixed- xmode))
5001 (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 16"))
5002 (attrs (machine 32))
5003 (mode xmode)
5004 (choices
5005 (.sym dst32-16-8-An-relative-Unprefixed- xmode)
5006 (.sym dst32-16-8-SB-relative-Unprefixed- xmode)
5007 (.sym dst32-16-8-FB-relative-Unprefixed- xmode)
5008 )
5009 )
5010 (define-anyof-operand
5011 (name (.sym dst32-16-16-Unprefixed- xmode))
5012 (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 16"))
5013 (attrs (machine 32))
5014 (mode xmode)
5015 (choices
5016 (.sym dst32-16-16-An-relative-Unprefixed- xmode)
5017 (.sym dst32-16-16-SB-relative-Unprefixed- xmode)
5018 (.sym dst32-16-16-FB-relative-Unprefixed- xmode)
5019 (.sym dst32-16-16-absolute-Unprefixed- xmode)
5020 )
5021 )
5022 (define-anyof-operand
5023 (name (.sym dst32-16-24-Unprefixed- xmode))
5024 (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 16"))
5025 (attrs (machine 32))
5026 (mode xmode)
5027 (choices
5028 (.sym dst32-16-24-An-relative-Unprefixed- xmode)
5029 (.sym dst32-16-24-absolute-Unprefixed- xmode)
5030 )
5031 )
5032 )
5033)
5034
5035(dst32-16-operand QI)
5036(dst32-16-operand HI)
5037(dst32-16-operand SI)
5038
5039(define-pmacro (dst32-16-Ext-operand smode dmode)
5040 (begin
5041 (define-anyof-operand
5042 (name (.sym dst32-16-ExtUnprefixed- smode))
5043 (comment (.str "m32c destination operand of size " smode " with additional fields at offset 16"))
5044 (attrs (machine 32))
5045 (mode dmode)
5046 (choices
5047 (.sym dst32-Rn-direct-ExtUnprefixed- smode)
5048 (.sym dst32-An-direct-Unprefixed- dmode) ; ExtUnprefixed mode not required for this operand -- use the normal dmode version
5049 (.sym dst32-An-indirect-ExtUnprefixed- smode)
5050 (.sym dst32-16-8-An-relative-ExtUnprefixed- smode)
5051 (.sym dst32-16-16-An-relative-ExtUnprefixed- smode)
5052 (.sym dst32-16-24-An-relative-ExtUnprefixed- smode)
5053 (.sym dst32-16-8-SB-relative-ExtUnprefixed- smode)
5054 (.sym dst32-16-16-SB-relative-ExtUnprefixed- smode)
5055 (.sym dst32-16-8-FB-relative-ExtUnprefixed- smode)
5056 (.sym dst32-16-16-FB-relative-ExtUnprefixed- smode)
5057 (.sym dst32-16-16-absolute-ExtUnprefixed- smode)
5058 (.sym dst32-16-24-absolute-ExtUnprefixed- smode)
5059 )
5060 )
5061 )
5062)
5063
5064(dst32-16-Ext-operand QI HI)
5065(dst32-16-Ext-operand HI SI)
5066
5067(define-anyof-operand
5068 (name dst32-16-Unprefixed-Mulex-HI)
5069 (comment "m32c destination operand of size HI with additional fields at offset 16")
5070 (attrs (machine 32))
5071 (mode HI)
5072 (choices
5073 dst32-R3-direct-Unprefixed-HI
5074 dst32-An-direct-Unprefixed-HI
5075 dst32-An-indirect-Unprefixed-HI
5076 dst32-16-8-An-relative-Unprefixed-HI
5077 dst32-16-16-An-relative-Unprefixed-HI
5078 dst32-16-24-An-relative-Unprefixed-HI
5079 dst32-16-8-SB-relative-Unprefixed-HI
5080 dst32-16-16-SB-relative-Unprefixed-HI
5081 dst32-16-8-FB-relative-Unprefixed-HI
5082 dst32-16-16-FB-relative-Unprefixed-HI
5083 dst32-16-16-absolute-Unprefixed-HI
5084 dst32-16-24-absolute-Unprefixed-HI
5085 )
5086)
5087;-------------------------------------------------------------
5088; Destination operands with possible additional fields at offset 24 bits
5089;-------------------------------------------------------------
5090
5091(define-pmacro (dst16-24-operand xmode)
5092 (begin
5093 (define-anyof-operand
5094 (name (.sym dst16-24- xmode))
5095 (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 24"))
5096 (attrs (machine 16))
5097 (mode xmode)
5098 (choices
5099 (.sym dst16-Rn-direct- xmode)
5100 (.sym dst16-An-direct- xmode)
5101 (.sym dst16-An-indirect- xmode)
5102 (.sym dst16-24-8-An-relative- xmode)
5103 (.sym dst16-24-16-An-relative- xmode)
5104 (.sym dst16-24-8-SB-relative- xmode)
5105 (.sym dst16-24-16-SB-relative- xmode)
5106 (.sym dst16-24-8-FB-relative- xmode)
5107 (.sym dst16-24-16-absolute- xmode)
5108 )
5109 )
5110 )
5111)
5112
5113(dst16-24-operand QI)
5114(dst16-24-operand HI)
5115
5116(define-pmacro (dst32-24-operand xmode)
5117 (begin
5118 (define-anyof-operand
5119 (name (.sym dst32-24-Unprefixed- xmode))
5120 (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
5121 (attrs (machine 32))
5122 (mode xmode)
5123 (choices
5124 (.sym dst32-Rn-direct-Unprefixed- xmode)
5125 (.sym dst32-An-direct-Unprefixed- xmode)
5126 (.sym dst32-An-indirect-Unprefixed- xmode)
5127 (.sym dst32-24-8-An-relative-Unprefixed- xmode)
5128 (.sym dst32-24-16-An-relative-Unprefixed- xmode)
5129 (.sym dst32-24-24-An-relative-Unprefixed- xmode)
5130 (.sym dst32-24-8-SB-relative-Unprefixed- xmode)
5131 (.sym dst32-24-16-SB-relative-Unprefixed- xmode)
5132 (.sym dst32-24-8-FB-relative-Unprefixed- xmode)
5133 (.sym dst32-24-16-FB-relative-Unprefixed- xmode)
5134 (.sym dst32-24-16-absolute-Unprefixed- xmode)
5135 (.sym dst32-24-24-absolute-Unprefixed- xmode)
5136 )
5137 )
5138 (define-anyof-operand
5139 (name (.sym dst32-24-Prefixed- xmode))
5140 (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
5141 (attrs (machine 32))
5142 (mode xmode)
5143 (choices
5144 (.sym dst32-Rn-direct-Prefixed- xmode)
5145 (.sym dst32-An-direct-Prefixed- xmode)
5146 (.sym dst32-An-indirect-Prefixed- xmode)
5147 (.sym dst32-24-8-An-relative-Prefixed- xmode)
5148 (.sym dst32-24-16-An-relative-Prefixed- xmode)
5149 (.sym dst32-24-24-An-relative-Prefixed- xmode)
5150 (.sym dst32-24-8-SB-relative-Prefixed- xmode)
5151 (.sym dst32-24-16-SB-relative-Prefixed- xmode)
5152 (.sym dst32-24-8-FB-relative-Prefixed- xmode)
5153 (.sym dst32-24-16-FB-relative-Prefixed- xmode)
5154 (.sym dst32-24-16-absolute-Prefixed- xmode)
5155 (.sym dst32-24-24-absolute-Prefixed- xmode)
5156 )
5157 )
5158 (define-anyof-operand
5159 (name (.sym dst32-24-8-Prefixed- xmode))
5160 (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
5161 (attrs (machine 32))
5162 (mode xmode)
5163 (choices
5164 (.sym dst32-24-8-An-relative-Prefixed- xmode)
5165 (.sym dst32-24-8-SB-relative-Prefixed- xmode)
5166 (.sym dst32-24-8-FB-relative-Prefixed- xmode)
5167 )
5168 )
5169 (define-anyof-operand
5170 (name (.sym dst32-24-16-Prefixed- xmode))
5171 (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
5172 (attrs (machine 32))
5173 (mode xmode)
5174 (choices
5175 (.sym dst32-24-16-An-relative-Prefixed- xmode)
5176 (.sym dst32-24-16-SB-relative-Prefixed- xmode)
5177 (.sym dst32-24-16-FB-relative-Prefixed- xmode)
5178 (.sym dst32-24-16-absolute-Prefixed- xmode)
5179 )
5180 )
5181 (define-anyof-operand
5182 (name (.sym dst32-24-24-Prefixed- xmode))
5183 (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
5184 (attrs (machine 32))
5185 (mode xmode)
5186 (choices
5187 (.sym dst32-24-24-An-relative-Prefixed- xmode)
5188 (.sym dst32-24-24-absolute-Prefixed- xmode)
5189 )
5190 )
5191; (define-anyof-operand
5192; (name (.sym dst32-24-indirect- xmode))
5193; (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
5194; (attrs (machine 32))
5195; (mode xmode)
5196; (choices
5197; (.sym dst32-An-indirect-indirect- xmode)
5198; (.sym dst32-24-8-An-relative-indirect- xmode)
5199; (.sym dst32-24-16-An-relative-indirect- xmode)
5200; (.sym dst32-24-24-An-relative-indirect- xmode)
5201; (.sym dst32-24-8-SB-relative-indirect- xmode)
5202; (.sym dst32-24-16-SB-relative-indirect- xmode)
5203; (.sym dst32-24-8-FB-relative-indirect- xmode)
5204; (.sym dst32-24-16-FB-relative-indirect- xmode)
5205; )
5206; )
5207; (define-anyof-operand
5208; (name (.sym dst32-basic-indirect- xmode))
5209; (comment (.str "m32c destination operand of size " xmode " with no additional fields"))
5210; (attrs (machine 32))
5211; (mode xmode)
5212; (choices
5213; (.sym dst32-An-indirect-indirect- xmode)
5214; )
5215; )
5216; (define-anyof-operand
5217; (name (.sym dst32-24-8-indirect- xmode))
5218; (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
5219; (attrs (machine 32))
5220; (mode xmode)
5221; (choices
5222; (.sym dst32-24-8-An-relative-indirect- xmode)
5223; (.sym dst32-24-8-SB-relative-indirect- xmode)
5224; (.sym dst32-24-8-FB-relative-indirect- xmode)
5225; )
5226; )
5227; (define-anyof-operand
5228; (name (.sym dst32-24-16-indirect- xmode))
5229; (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
5230; (attrs (machine 32))
5231; (mode xmode)
5232; (choices
5233; (.sym dst32-24-16-An-relative-indirect- xmode)
5234; (.sym dst32-24-16-SB-relative-indirect- xmode)
5235; (.sym dst32-24-16-FB-relative-indirect- xmode)
5236; )
5237; )
5238; (define-anyof-operand
5239; (name (.sym dst32-24-24-indirect- xmode))
5240; (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
5241; (attrs (machine 32))
5242; (mode xmode)
5243; (choices
5244; (.sym dst32-24-24-An-relative-indirect- xmode)
5245; )
5246; )
5247; (define-anyof-operand
5248; (name (.sym dst32-24-absolute-indirect- xmode))
5249; (comment (.str "m32c destination operand of size " xmode " absolute indirect"))
5250; (attrs (machine 32))
5251; (mode xmode)
5252; (choices
5253; (.sym dst32-24-16-absolute-indirect-derived- xmode)
5254; (.sym dst32-24-24-absolute-indirect-derived- xmode)
5255; )
5256; )
5257; (define-anyof-operand
5258; (name (.sym dst32-24-16-absolute-indirect- xmode))
5259; (comment (.str "m32c destination operand of size " xmode " absolute indirect"))
5260; (attrs (machine 32))
5261; (mode xmode)
5262; (choices
5263; (.sym dst32-24-16-absolute-indirect-derived- xmode)
5264; )
5265; )
5266; (define-anyof-operand
5267; (name (.sym dst32-24-24-absolute-indirect- xmode))
5268; (comment (.str "m32c destination operand of size " xmode " absolute indirect"))
5269; (attrs (machine 32))
5270; (mode xmode)
5271; (choices
5272; (.sym dst32-24-24-absolute-indirect-derived- xmode)
5273; )
5274; )
5275 )
5276)
5277
5278(dst32-24-operand QI)
5279(dst32-24-operand HI)
5280(dst32-24-operand SI)
5281
5282;-------------------------------------------------------------
5283; Destination operands with possible additional fields at offset 32 bits
5284;-------------------------------------------------------------
5285
5286(define-pmacro (dst16-32-operand xmode)
5287 (begin
5288 (define-anyof-operand
5289 (name (.sym dst16-32- xmode))
5290 (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 32"))
5291 (attrs (machine 16))
5292 (mode xmode)
5293 (choices
5294 (.sym dst16-Rn-direct- xmode)
5295 (.sym dst16-An-direct- xmode)
5296 (.sym dst16-An-indirect- xmode)
5297 (.sym dst16-32-8-An-relative- xmode)
5298 (.sym dst16-32-16-An-relative- xmode)
5299 (.sym dst16-32-8-SB-relative- xmode)
5300 (.sym dst16-32-16-SB-relative- xmode)
5301 (.sym dst16-32-8-FB-relative- xmode)
5302 (.sym dst16-32-16-absolute- xmode)
5303 )
5304 )
5305 )
5306)
5307(dst16-32-operand QI)
5308(dst16-32-operand HI)
5309
5310; This macro actually handles operands at offset 32, 40 and 48 bits
5311(define-pmacro (dst32-32plus-operand offset xmode)
5312 (begin
5313 (define-anyof-operand
5314 (name (.sym dst32- offset -Unprefixed- xmode))
5315 (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 32"))
5316 (attrs (machine 32))
5317 (mode xmode)
5318 (choices
5319 (.sym dst32-Rn-direct-Unprefixed- xmode)
5320 (.sym dst32-An-direct-Unprefixed- xmode)
5321 (.sym dst32-An-indirect-Unprefixed- xmode)
5322 (.sym dst32- offset -8-An-relative-Unprefixed- xmode)
5323 (.sym dst32- offset -16-An-relative-Unprefixed- xmode)
5324 (.sym dst32- offset -24-An-relative-Unprefixed- xmode)
5325 (.sym dst32- offset -8-SB-relative-Unprefixed- xmode)
5326 (.sym dst32- offset -16-SB-relative-Unprefixed- xmode)
5327 (.sym dst32- offset -8-FB-relative-Unprefixed- xmode)
5328 (.sym dst32- offset -16-FB-relative-Unprefixed- xmode)
5329 (.sym dst32- offset -16-absolute-Unprefixed- xmode)
5330 (.sym dst32- offset -24-absolute-Unprefixed- xmode)
5331 )
5332 )
5333 (define-anyof-operand
5334 (name (.sym dst32- offset -Prefixed- xmode))
5335 (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 32"))
5336 (attrs (machine 32))
5337 (mode xmode)
5338 (choices
5339 (.sym dst32-Rn-direct-Prefixed- xmode)
5340 (.sym dst32-An-direct-Prefixed- xmode)
5341 (.sym dst32-An-indirect-Prefixed- xmode)
5342 (.sym dst32- offset -8-An-relative-Prefixed- xmode)
5343 (.sym dst32- offset -16-An-relative-Prefixed- xmode)
5344 (.sym dst32- offset -24-An-relative-Prefixed- xmode)
5345 (.sym dst32- offset -8-SB-relative-Prefixed- xmode)
5346 (.sym dst32- offset -16-SB-relative-Prefixed- xmode)
5347 (.sym dst32- offset -8-FB-relative-Prefixed- xmode)
5348 (.sym dst32- offset -16-FB-relative-Prefixed- xmode)
5349 (.sym dst32- offset -16-absolute-Prefixed- xmode)
5350 (.sym dst32- offset -24-absolute-Prefixed- xmode)
5351 )
5352 )
5353; (define-anyof-operand
5354; (name (.sym dst32- offset -indirect- xmode))
5355; (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 32"))
5356; (attrs (machine 32))
5357; (mode xmode)
5358; (choices
5359; (.sym dst32-An-indirect-indirect- xmode)
5360; (.sym dst32- offset -8-An-relative-indirect- xmode)
5361; (.sym dst32- offset -16-An-relative-indirect- xmode)
5362; (.sym dst32- offset -24-An-relative-indirect- xmode)
5363; (.sym dst32- offset -8-SB-relative-indirect- xmode)
5364; (.sym dst32- offset -16-SB-relative-indirect- xmode)
5365; (.sym dst32- offset -8-FB-relative-indirect- xmode)
5366; (.sym dst32- offset -16-FB-relative-indirect- xmode)
5367; )
5368; )
5369; (define-anyof-operand
5370; (name (.sym dst32- offset -absolute-indirect- xmode))
5371; (comment (.str "m32c destination operand of size " xmode " absolute indirect"))
5372; (attrs (machine 32))
5373; (mode xmode)
5374; (choices
5375; (.sym dst32- offset -16-absolute-indirect-derived- xmode)
5376; (.sym dst32- offset -24-absolute-indirect-derived- xmode)
5377; )
5378; )
5379 )
5380)
5381
5382(dst32-32plus-operand 32 QI)
5383(dst32-32plus-operand 32 HI)
5384(dst32-32plus-operand 32 SI)
5385(dst32-32plus-operand 40 QI)
5386(dst32-32plus-operand 40 HI)
5387(dst32-32plus-operand 40 SI)
5388
5389;-------------------------------------------------------------
5390; Destination operands with possible additional fields at offset 48 bits
5391;-------------------------------------------------------------
5392
5393(define-pmacro (dst32-48-operand offset xmode)
5394 (begin
5395 (define-anyof-operand
5396 (name (.sym dst32- offset -Prefixed- xmode))
5397 (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 32"))
5398 (attrs (machine 32))
5399 (mode xmode)
5400 (choices
5401 (.sym dst32-Rn-direct-Prefixed- xmode)
5402 (.sym dst32-An-direct-Prefixed- xmode)
5403 (.sym dst32-An-indirect-Prefixed- xmode)
5404 (.sym dst32- offset -8-An-relative-Prefixed- xmode)
5405 (.sym dst32- offset -16-An-relative-Prefixed- xmode)
5406 (.sym dst32- offset -24-An-relative-Prefixed- xmode)
5407 (.sym dst32- offset -8-SB-relative-Prefixed- xmode)
5408 (.sym dst32- offset -16-SB-relative-Prefixed- xmode)
5409 (.sym dst32- offset -8-FB-relative-Prefixed- xmode)
5410 (.sym dst32- offset -16-FB-relative-Prefixed- xmode)
5411 (.sym dst32- offset -16-absolute-Prefixed- xmode)
5412 (.sym dst32- offset -24-absolute-Prefixed- xmode)
5413 )
5414 )
5415; (define-anyof-operand
5416; (name (.sym dst32- offset -indirect- xmode))
5417; (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 32"))
5418; (attrs (machine 32))
5419; (mode xmode)
5420; (choices
5421; (.sym dst32-An-indirect-indirect- xmode)
5422; (.sym dst32- offset -8-An-relative-indirect- xmode)
5423; (.sym dst32- offset -16-An-relative-indirect- xmode)
5424; (.sym dst32- offset -24-An-relative-indirect- xmode)
5425; (.sym dst32- offset -8-SB-relative-indirect- xmode)
5426; (.sym dst32- offset -16-SB-relative-indirect- xmode)
5427; (.sym dst32- offset -8-FB-relative-indirect- xmode)
5428; (.sym dst32- offset -16-FB-relative-indirect- xmode)
5429; )
5430; )
5431; (define-anyof-operand
5432; (name (.sym dst32- offset -absolute-indirect- xmode))
5433; (comment (.str "m32c destination operand of size " xmode " absolute indirect"))
5434; (attrs (machine 32))
5435; (mode xmode)
5436; (choices
5437; (.sym dst32- offset -16-absolute-indirect-derived- xmode)
5438; (.sym dst32- offset -24-absolute-indirect-derived- xmode)
5439; )
5440; )
5441 )
5442)
5443
5444(dst32-48-operand 48 QI)
5445(dst32-48-operand 48 HI)
5446(dst32-48-operand 48 SI)
5447
5448;-------------------------------------------------------------
5449; Bit operands for m16c
5450;-------------------------------------------------------------
5451
5452(define-pmacro (bit16-operand offset)
5453 (begin
5454 (define-anyof-operand
5455 (name (.sym bit16- offset))
5456 (comment (.str "m16c bit operand with possible additional fields at offset 24"))
5457 (attrs (machine 16))
5458 (mode BI)
5459 (choices
5460 bit16-Rn-direct
5461 bit16-An-direct
5462 bit16-An-indirect
5463 (.sym bit16- offset -8-An-relative)
5464 (.sym bit16- offset -16-An-relative)
5465 (.sym bit16- offset -8-SB-relative)
5466 (.sym bit16- offset -16-SB-relative)
5467 (.sym bit16- offset -8-FB-relative)
5468 (.sym bit16- offset -16-absolute)
5469 )
5470 )
5471 (define-anyof-operand
5472 (name (.sym bit16- offset -basic))
5473 (comment (.str "m16c bit operand with no additional fields"))
5474 (attrs (machine 16))
5475 (mode BI)
5476 (choices
5477 bit16-An-indirect
5478 )
5479 )
5480 (define-anyof-operand
5481 (name (.sym bit16- offset -8))
5482 (comment (.str "m16c bit operand with possible additional fields at offset 24"))
5483 (attrs (machine 16))
5484 (mode BI)
5485 (choices
5486 bit16-Rn-direct
5487 bit16-An-direct
5488 (.sym bit16- offset -8-An-relative)
5489 (.sym bit16- offset -8-SB-relative)
5490 (.sym bit16- offset -8-FB-relative)
5491 )
5492 )
5493 (define-anyof-operand
5494 (name (.sym bit16- offset -16))
5495 (comment (.str "m16c bit operand with possible additional fields at offset 24"))
5496 (attrs (machine 16))
5497 (mode BI)
5498 (choices
5499 (.sym bit16- offset -16-An-relative)
5500 (.sym bit16- offset -16-SB-relative)
5501 (.sym bit16- offset -16-absolute)
5502 )
5503 )
5504 )
5505)
5506
5507(bit16-operand 16)
5508
5509;-------------------------------------------------------------
5510; Bit operands for m32c
5511;-------------------------------------------------------------
5512
5513(define-pmacro (bit32-operand offset group)
5514 (begin
5515 (define-anyof-operand
5516 (name (.sym bit32- offset - group))
5517 (comment (.str "m32c bit operand with possible additional fields at offset 24"))
5518 (attrs (machine 32))
5519 (mode BI)
5520 (choices
5521 (.sym bit32-Rn-direct- group)
5522 (.sym bit32-An-direct- group)
5523 (.sym bit32-An-indirect- group)
5524 (.sym bit32- offset -11-An-relative- group)
5525 (.sym bit32- offset -19-An-relative- group)
5526 (.sym bit32- offset -27-An-relative- group)
5527 (.sym bit32- offset -11-SB-relative- group)
5528 (.sym bit32- offset -19-SB-relative- group)
5529 (.sym bit32- offset -11-FB-relative- group)
5530 (.sym bit32- offset -19-FB-relative- group)
5531 (.sym bit32- offset -19-absolute- group)
5532 (.sym bit32- offset -27-absolute- group)
5533 )
5534 )
5535 )
5536)
5537
5538(bit32-operand 16 Unprefixed)
5539(bit32-operand 24 Prefixed)
5540
5541(define-anyof-operand
5542 (name bit32-basic-Unprefixed)
5543 (comment "m32c bit operand with no additional fields")
5544 (attrs (machine 32))
5545 (mode BI)
5546 (choices
5547 bit32-Rn-direct-Unprefixed
5548 bit32-An-direct-Unprefixed
5549 bit32-An-indirect-Unprefixed
5550 )
5551)
5552
5553(define-anyof-operand
5554 (name bit32-16-8-Unprefixed)
5555 (comment "m32c bit operand with 8 bit additional fields")
5556 (attrs (machine 32))
5557 (mode BI)
5558 (choices
5559 bit32-16-11-An-relative-Unprefixed
5560 bit32-16-11-SB-relative-Unprefixed
5561 bit32-16-11-FB-relative-Unprefixed
5562 )
5563)
5564
5565(define-anyof-operand
5566 (name bit32-16-16-Unprefixed)
5567 (comment "m32c bit operand with 16 bit additional fields")
5568 (attrs (machine 32))
5569 (mode BI)
5570 (choices
5571 bit32-16-19-An-relative-Unprefixed
5572 bit32-16-19-SB-relative-Unprefixed
5573 bit32-16-19-FB-relative-Unprefixed
5574 bit32-16-19-absolute-Unprefixed
5575 )
5576)
5577
5578(define-anyof-operand
5579 (name bit32-16-24-Unprefixed)
5580 (comment "m32c bit operand with 24 bit additional fields")
5581 (attrs (machine 32))
5582 (mode BI)
5583 (choices
5584 bit32-16-27-An-relative-Unprefixed
5585 bit32-16-27-absolute-Unprefixed
5586 )
5587)
5588
5589;-------------------------------------------------------------
5590; Operands for short format binary insns
5591;-------------------------------------------------------------
5592
5593(define-anyof-operand
5594 (name src16-2-S)
5595 (comment "m16c source operand of size QI for short format insns")
5596 (attrs (machine 16))
5597 (mode QI)
5598 (choices
5599 src16-2-S-8-SB-relative-QI
5600 src16-2-S-8-FB-relative-QI
5601 src16-2-S-16-absolute-QI
5602 )
5603)
5604
5605(define-anyof-operand
5606 (name src32-2-S-QI)
5607 (comment "m32c source operand of size QI for short format insns")
5608 (attrs (machine 32))
5609 (mode QI)
5610 (choices
5611 src32-2-S-8-SB-relative-QI
5612 src32-2-S-8-FB-relative-QI
5613 src32-2-S-16-absolute-QI
5614 )
5615)
5616
5617(define-anyof-operand
5618 (name src32-2-S-HI)
5619 (comment "m32c source operand of size QI for short format insns")
5620 (attrs (machine 32))
5621 (mode HI)
5622 (choices
5623 src32-2-S-8-SB-relative-HI
5624 src32-2-S-8-FB-relative-HI
5625 src32-2-S-16-absolute-HI
5626 )
5627)
5628
5629(define-anyof-operand
5630 (name Dst16-3-S-8)
5631 (comment "m16c destination operand of size QI for short format insns")
5632 (attrs (machine 16))
5633 (mode QI)
5634 (choices
5635 dst16-3-S-R0l-direct-QI
5636 dst16-3-S-R0h-direct-QI
5637 dst16-3-S-8-8-SB-relative-QI
5638 dst16-3-S-8-8-FB-relative-QI
5639 dst16-3-S-8-16-absolute-QI
5640 )
5641)
5642
5643(define-anyof-operand
5644 (name Dst16-3-S-16)
5645 (comment "m16c destination operand of size QI for short format insns")
5646 (attrs (machine 16))
5647 (mode QI)
5648 (choices
5649 dst16-3-S-R0l-direct-QI
5650 dst16-3-S-R0h-direct-QI
5651 dst16-3-S-16-8-SB-relative-QI
5652 dst16-3-S-16-8-FB-relative-QI
5653 dst16-3-S-16-16-absolute-QI
5654 )
5655)
5656
5657(define-anyof-operand
5658 (name srcdst16-r0l-r0h-S)
5659 (comment "m16c r0l/r0h operand of size QI for short format insns")
5660 (attrs (machine 16))
5661 (mode SI)
5662 (choices
5663 srcdst16-r0l-r0h-S-derived
5664 )
5665)
5666
5667(define-anyof-operand
5668 (name dst32-2-S-basic-QI)
5669 (comment "m32c r0l operand of size QI for short format binary insns")
5670 (attrs (machine 32))
5671 (mode QI)
5672 (choices
5673 dst32-2-S-R0l-direct-QI
5674 )
5675)
5676
5677(define-anyof-operand
5678 (name dst32-2-S-basic-HI)
5679 (comment "m32c r0 operand of size HI for short format binary insns")
5680 (attrs (machine 32))
5681 (mode HI)
5682 (choices
5683 dst32-2-S-R0-direct-HI
5684 )
5685)
5686
5687(define-pmacro (dst32-2-S-operands xmode)
5688 (begin
5689 (define-anyof-operand
5690 (name (.sym dst32-2-S-8- xmode))
5691 (comment "m32c operand of size " xmode " for short format binary insns")
5692 (attrs (machine 32))
5693 (mode xmode)
5694 (choices
5695 (.sym dst32-2-S-8-SB-relative- xmode)
5696 (.sym dst32-2-S-8-FB-relative- xmode)
5697 )
5698 )
5699 (define-anyof-operand
5700 (name (.sym dst32-2-S-16- xmode))
5701 (comment "m32c operand of size " xmode " for short format binary insns")
5702 (attrs (machine 32))
5703 (mode xmode)
5704 (choices
5705 (.sym dst32-2-S-16-absolute- xmode)
5706 )
5707 )
5708; (define-anyof-operand
5709; (name (.sym dst32-2-S-8-indirect- xmode))
5710; (comment "m32c operand of size " xmode " for short format binary insns")
5711; (attrs (machine 32))
5712; (mode xmode)
5713; (choices
5714; (.sym dst32-2-S-8-SB-relative-indirect- xmode)
5715; (.sym dst32-2-S-8-FB-relative-indirect- xmode)
5716; )
5717; )
5718; (define-anyof-operand
5719; (name (.sym dst32-2-S-absolute-indirect- xmode))
5720; (comment "m32c operand of size " xmode " for short format binary insns")
5721; (attrs (machine 32))
5722; (mode xmode)
5723; (choices
5724; (.sym dst32-2-S-16-absolute-indirect- xmode)
5725; )
5726; )
5727 )
5728)
5729
5730(dst32-2-S-operands QI)
5731(dst32-2-S-operands HI)
5732(dst32-2-S-operands SI)
5733
5734(define-anyof-operand
5735 (name dst32-an-S)
5736 (comment "m32c An operand for short format binary insns")
5737 (attrs (machine 32))
5738 (mode HI)
5739 (choices
5740 dst32-1-S-A0-direct-HI
5741 dst32-1-S-A1-direct-HI
5742 )
5743)
5744
5745(define-anyof-operand
5746 (name bit16-11-S)
5747 (comment "m16c bit operand for short format insns")
5748 (attrs (machine 16))
5749 (mode BI)
5750 (choices
5751 bit16-11-SB-relative-S
5752 )
5753)
5754
5755(define-anyof-operand
5756 (name Rn16-push-S-anyof)
5757 (comment "m16c bit operand for short format insns")
5758 (attrs (machine 16))
5759 (mode QI)
5760 (choices
5761 Rn16-push-S-derived
5762 )
5763)
5764
5765(define-anyof-operand
5766 (name An16-push-S-anyof)
5767 (comment "m16c bit operand for short format insns")
5768 (attrs (machine 16))
5769 (mode HI)
5770 (choices
5771 An16-push-S-derived
5772 )
5773)
5774
5775;=============================================================
5776; Common macros for instruction definitions
5777;
5778(define-pmacro (set-z x)
5779 (sequence ()
5780 (set zbit (zflag x)))
5781
5782)
5783
5784(define-pmacro (set-s x)
5785 (sequence ()
5786 (set sbit (nflag x)))
5787)
5788
5789(define-pmacro (set-z-and-s x)
5790 (sequence ()
5791 (set-z x)
5792 (set-s x))
5793)
5794\f
5795;=============================================================
5796; Unary insn macros
5797;-------------------------------------------------------------
5798
5799(define-pmacro (unary-insn-defn mach group mode wstr op encoding sem)
5800 (dni (.sym op mach wstr - group)
5801 (.str op wstr " dst" mach "-" group "-" mode)
5802 ((machine mach))
5803 (.str op wstr " ${dst" mach "-" group "-" mode "}")
5804 encoding
5805 (sem mode (.sym dst mach - group - mode))
5806 ())
5807)
5808
5809
5810(define-pmacro (unary16-defn mode wstr wbit op opc1 opc2 opc3 sem)
5811 (unary-insn-defn 16 16 mode wstr op
5812 (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16- mode))
5813 sem)
5814)
5815
5816(define-pmacro (unary32-defn mode wstr wbit op opc1 opc2 opc3 sem)
5817 (begin
5818 ; Multi insns are tried for assembly in the reverse order in which they appear here, so
5819 ; define the absolute-indirect insns first in order to prevent them from being selected
5820 ; when the mode is register-indirect
5821; (unary-insn-defn 32 24-absolute-indirect mode wstr op
5822; (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-15-1 wbit) (.sym dst32-24-absolute-indirect- mode) (f-18-2 opc2) (f-20-4 opc3))
5823; sem)
5824 (unary-insn-defn 32 16-Unprefixed mode wstr op
5825 (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3))
5826 sem)
5827; (unary-insn-defn 32 24-indirect mode wstr op
5828; (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-15-1 wbit) (.sym dst32-24-indirect- mode) (f-18-2 opc2) (f-20-4 opc3))
5829; sem)
5830 )
5831)
5832
5833(define-pmacro (unary-insn-mach mach op opc1 opc2 opc3 sem)
5834 (begin
5835 (.apply (.sym unary mach -defn) (QI .b 0 op opc1 opc2 opc3 sem))
5836 (.apply (.sym unary mach -defn) (HI .w 1 op opc1 opc2 opc3 sem))
5837 )
5838)
5839
5840(define-pmacro (unary-insn op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
5841 (begin
5842 (unary-insn-mach 16 op opc16-1 opc16-2 opc16-3 sem)
5843 (unary-insn-mach 32 op opc32-1 opc32-2 opc32-3 sem)
5844 )
5845)
5846
5847;-------------------------------------------------------------
5848; Sign/zero extension macros
5849;-------------------------------------------------------------
5850
5851(define-pmacro (ext-insn-defn mach group smode dmode wstr op encoding sem)
5852 (dni (.sym op mach wstr - group)
5853 (.str op wstr " dst" mach "-" group "-" smode)
5854 ((machine mach))
5855 (.str op wstr " ${dst" mach "-" group "-" smode "}")
5856 encoding
5857 (sem smode dmode (.sym dst mach - group - smode) (.sym dst mach - group - smode))
5858 ())
5859)
5860
5861(define-pmacro (ext16-defn smode dmode wstr wbit op opc1 opc2 opc3 sem)
5862 (ext-insn-defn 16 16-Ext smode dmode wstr op
5863 (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-Ext- smode))
5864 sem)
5865)
5866
5867(define-pmacro (ext32-defn smode dmode wstr wbit op opc1 opc2 opc3 sem)
5868 (ext-insn-defn 32 16-ExtUnprefixed smode dmode wstr op
5869 (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst32-16-ExtUnprefixed- smode))
5870 sem)
5871)
5872
5873(define-pmacro (ext32-binary-insn src-group dst-group op wstr encoding sem)
5874 (dni (.sym op 32 wstr - src-group - dst-group)
5875 (.str op 32 wstr " src32-" src-group "-QI,dst32-" dst-group "-HI")
5876 ((machine 32))
5877 (.str op wstr " ${src32-" src-group "-QI},${dst32-" dst-group "-HI}")
5878 encoding
5879 (sem QI HI (.sym src32- src-group -QI) (.sym dst32 - dst-group -HI))
5880 ())
5881)
5882
5883(define-pmacro (ext32-binary-defn op wstr opc1 opc2 sem)
5884 (begin
5885 (ext32-binary-insn basic-ExtPrefixed 24-Prefixed op wstr
5886 (+ (f-0-4 0) (f-4-4 1) (f-8-1 opc1) (f-15-1 0) src32-basic-ExtPrefixed-QI dst32-24-Prefixed-HI (f-20-4 opc2))
5887 sem)
5888 (ext32-binary-insn 24-24-Prefixed 48-Prefixed op wstr
5889 (+ (f-0-4 0) (f-4-4 1) (f-8-1 opc1) (f-15-1 0) src32-24-24-Prefixed-QI dst32-48-Prefixed-HI (f-20-4 opc2))
5890 sem)
5891 (ext32-binary-insn 24-16-Prefixed 40-Prefixed op wstr
5892 (+ (f-0-4 0) (f-4-4 1) (f-8-1 opc1) (f-15-1 0) src32-24-16-Prefixed-QI dst32-40-Prefixed-HI (f-20-4 opc2))
5893 sem)
5894 (ext32-binary-insn 24-8-Prefixed 32-Prefixed op wstr
5895 (+ (f-0-4 0) (f-4-4 1) (f-8-1 opc1) (f-15-1 0) src32-24-8-Prefixed-QI dst32-32-Prefixed-HI (f-20-4 opc2))
5896 sem)
5897 )
5898)
5899
5900;=============================================================
5901; Binary Arithmetic macros
5902;
5903;-------------------------------------------------------------
5904;<arith>.size:S src2,r0[l] -- for m32c
5905;-------------------------------------------------------------
5906
5907(define-pmacro (binary-arith32-S-src2 op xmode wstr wbit opc1 opc2 sem)
5908 (dni (.sym op 32 wstr .S-src2-r0- xmode)
5909 (.str op 32 wstr ":S src2,r0[l]")
5910 ((machine 32))
5911 (.str op wstr"$S ${src32-2-S-" xmode "},${Dst32R0" xmode "-S}")
5912 (+ opc1 opc2 (.sym src32-2-S- xmode) (f-7-1 wbit))
5913 (sem xmode (.sym src32-2-S- xmode) (.sym Dst32R0 xmode -S))
5914 ())
5915)
5916
5917;-------------------------------------------------------------
5918;<arith>.b:S src2,r0l/r0h -- for m16c
5919;-------------------------------------------------------------
5920
5921(define-pmacro (binary-arith16-b-S-src2 op opc1 opc2 sem)
5922 (begin
5923 (dni (.sym op 16 .b.S-src2)
5924 (.str op ".b:S src2,r0[lh]")
5925 ((machine 16))
5926 (.str op ".b$S ${src16-2-S},${Dst16RnQI-S}")
5927 (+ opc1 opc2 Dst16RnQI-S src16-2-S)
5928 (sem QI src16-2-S Dst16RnQI-S)
5929 ())
5930 (dni (.sym op 16 .b.S-r0l-r0h)
5931 (.str op ".b:S r0l/r0h")
5932 ((machine 16))
5933 (.str op ".b$S ${srcdst16-r0l-r0h-S}")
5934 (+ opc1 opc2 srcdst16-r0l-r0h-S)
5935 (if (eq srcdst16-r0l-r0h-S 0)
5936 (sem QI R0h R0l)
5937 (sem QI R0l R0h))
5938 ())
5939 )
5940)
5941
5942;-------------------------------------------------------------
5943;<arith>.b:S #imm8,dst3 -- for m16c
5944;-------------------------------------------------------------
5945
5946(define-pmacro (binary-arith16-b-S-imm8-dst3 op sz opc1 opc2 sem)
5947 (dni (.sym op 16 .b.S-imm8-dst3)
5948 (.str op sz ":S imm8,dst3")
5949 ((machine 16))
5950 (.str op sz "$S #${Imm-8-QI},${Dst16-3-S-16}")
5951 (+ opc1 opc2 Dst16-3-S-16 Imm-8-QI)
5952 (sem QI Imm-8-QI Dst16-3-S-16)
5953 ())
5954)
5955
5956;-------------------------------------------------------------
5957;<arith>.size:Q #imm4,sp -- for m16c
5958;-------------------------------------------------------------
5959
5960(define-pmacro (binary-arith16-Q-sp op opc1 opc2 opc3 sem)
5961 (dni (.sym op 16 -Q-sp)
5962 (.str op ":Q #imm4,sp")
5963 ((machine 16))
5964 (.str op "${size}$Q #${Imm-12-s4},sp")
5965 (+ opc1 opc2 opc3 Imm-12-s4)
5966 (sem QI Imm-12-s4 sp)
5967 ())
5968)
5969
5970;-------------------------------------------------------------
5971;<arith>.size:G #imm,sp -- for m16c
5972;-------------------------------------------------------------
5973
5974(define-pmacro (binary-arith16-G-sp-defn mode wstr wbit op opc1 opc2 opc3 opc4 sem)
5975 (dni (.sym op 16 wstr - G-sp)
5976 (.str op wstr " imm-sp " mode)
5977 ((machine 16))
5978 (.str op wstr "$G #${Imm-16-" mode "},sp")
5979 (+ opc1 opc2 (f-7-1 wbit) opc3 opc4 (.sym Imm-16- mode))
5980 (sem mode (.sym Imm-16- mode) sp)
5981 ())
5982)
5983
5984(define-pmacro (binary-arith16-G-sp op opc1 opc2 opc3 opc4 sem)
5985 (begin
5986 (binary-arith16-G-sp-defn QI .b 0 op opc1 opc2 opc3 opc4 sem)
5987 (binary-arith16-G-sp-defn HI .w 1 op opc1 opc2 opc3 opc4 sem)
5988 )
5989)
5990
5991;-------------------------------------------------------------
5992;<arith>.size:G #imm,dst -- for m16c and m32c
5993;-------------------------------------------------------------
5994
5995(define-pmacro (binary-arith-imm-dst-defn mach src dstgroup dmode wstr op suffix encoding sem)
5996 (dni (.sym op mach wstr - imm-G - dstgroup)
5997 (.str op wstr " " mach "-imm-G-" dstgroup "-" dmode)
5998 ((machine mach))
5999 (.str op wstr "$"suffix " #${" src "},${dst" mach "-" dstgroup "-" dmode "}")
6000 encoding
6001 (sem dmode src (.sym dst mach - dstgroup - dmode))
6002 ())
6003)
6004
6005; m16c variants
6006(define-pmacro (binary-arith16-imm-dst-defn smode dmode wstr wbit op suffix opc1 opc2 opc3 sem)
6007 (begin
6008 (binary-arith-imm-dst-defn 16 (.sym Imm-32- smode) 16-16 dmode wstr op suffix
6009 (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-16- dmode) (.sym Imm-32- smode))
6010 sem)
6011 (binary-arith-imm-dst-defn 16 (.sym Imm-24- smode) 16-8 dmode wstr op suffix
6012 (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-8- dmode) (.sym Imm-24- smode))
6013 sem)
6014 (binary-arith-imm-dst-defn 16 (.sym Imm-16- smode) basic dmode wstr op suffix
6015 (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-basic- dmode) (.sym Imm-16- smode))
6016 sem)
6017 )
6018)
6019
6020; m32c Unprefixed variants
6021(define-pmacro (binary-arith32-imm-dst-Unprefixed smode dmode wstr wbit op suffix opc1 opc2 opc3 sem)
6022 (begin
6023 (binary-arith-imm-dst-defn 32 (.sym Imm-40- smode) 16-24-Unprefixed dmode wstr op suffix
6024 (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3) (.sym dst32-16-24-Unprefixed- dmode) (.sym Imm-40- smode))
6025 sem)
6026 (binary-arith-imm-dst-defn 32 (.sym Imm-32- smode) 16-16-Unprefixed dmode wstr op suffix
6027 (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3) (.sym dst32-16-16-Unprefixed- dmode) (.sym Imm-32- smode))
6028 sem)
6029 (binary-arith-imm-dst-defn 32 (.sym Imm-24- smode) 16-8-Unprefixed dmode wstr op suffix
6030 (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3) (.sym dst32-16-8-Unprefixed- dmode) (.sym Imm-24- smode))
6031 sem)
6032 (binary-arith-imm-dst-defn 32 (.sym Imm-16- smode) basic-Unprefixed dmode wstr op suffix
6033 (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3) (.sym dst32-basic-Unprefixed- dmode) (.sym Imm-16- smode))
6034 sem)
6035 )
6036)
6037
6038; m32c Prefixed variants
6039(define-pmacro (binary-arith32-imm-dst-Prefixed smode dmode wstr wbit op suffix opc1 opc2 opc3 sem)
6040 (begin
6041 (binary-arith-imm-dst-defn 32 (.sym Imm-48- smode) 24-24-Prefixed dmode wstr op suffix
6042 (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-24-24-Prefixed- dmode) (.sym Imm-48- smode))
6043 sem)
6044 (binary-arith-imm-dst-defn 32 (.sym Imm-40- smode) 24-16-Prefixed dmode wstr op suffix
6045 (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-24-16-Prefixed- dmode) (.sym Imm-40- smode))
6046 sem)
6047 (binary-arith-imm-dst-defn 32 (.sym Imm-32- smode) 24-8-Prefixed dmode wstr op suffix
6048 (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-24-8-Prefixed- dmode) (.sym Imm-32- smode))
6049 sem)
6050 (binary-arith-imm-dst-defn 32 (.sym Imm-24- smode) basic-Prefixed dmode wstr op suffix
6051 (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-basic-Prefixed- dmode) (.sym Imm-24- smode))
6052 sem)
6053 )
6054)
6055
6056; All m32c variants
6057(define-pmacro (binary-arith32-imm-dst-defn smode dmode wstr wbit op suffix opc1 opc2 opc3 sem)
6058 (begin
6059 ; Multi insns are tried for assembly in the reverse order in which they appear here, so
6060 ; define the absolute-indirect insns first in order to prevent them from being selected
6061 ; when the mode is register-indirect
6062; (binary-arith-imm-dst-defn 32 (.sym Imm-48- smode) 24-24-absolute-indirect dmode wstr op suffix
6063; (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-24-24-absolute-indirect- dmode) (.sym Imm-48- smode))
6064; sem)
6065; (binary-arith-imm-dst-defn 32 (.sym Imm-40- smode) 24-16-absolute-indirect dmode wstr op suffix
6066; (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-24-16-absolute-indirect- dmode) (.sym Imm-40- smode))
6067; sem)
6068 ; Unprefixed modes next
6069 (binary-arith32-imm-dst-Unprefixed smode dmode wstr wbit op suffix opc1 opc2 opc3 sem)
6070
6071 ; Remaining indirect modes
6072; (binary-arith-imm-dst-defn 32 (.sym Imm-24- smode) basic-indirect dmode wstr op suffix
6073; (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-basic-indirect- dmode) (.sym Imm-24- smode))
6074; sem)
6075; (binary-arith-imm-dst-defn 32 (.sym Imm-48- smode) 24-24-indirect dmode wstr op suffix
6076; (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-24-24-indirect- dmode) (.sym Imm-48- smode))
6077; sem)
6078; (binary-arith-imm-dst-defn 32 (.sym Imm-40- smode) 24-16-indirect dmode wstr op suffix
6079; (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-24-16-indirect- dmode) (.sym Imm-40- smode))
6080; sem)
6081; (binary-arith-imm-dst-defn 32 (.sym Imm-32- smode) 24-8-indirect dmode wstr op suffix
6082; (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-24-8-indirect- dmode) (.sym Imm-32- smode))
6083; sem)
6084 )
6085)
6086
6087(define-pmacro (binary-arith-imm-dst-mach mach op suffix opc1 opc2 opc3 sem)
6088 (begin
6089 (.apply (.sym binary-arith mach -imm-dst-defn) (QI QI .b 0 op suffix opc1 opc2 opc3 sem))
6090 (.apply (.sym binary-arith mach -imm-dst-defn) (HI HI .w 1 op suffix opc1 opc2 opc3 sem))
6091 )
6092)
6093
6094(define-pmacro (binary-arith-imm-dst op suffix opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
6095 (begin
6096 (binary-arith-imm-dst-mach 16 op suffix opc16-1 opc16-2 opc16-3 sem)
6097 (binary-arith-imm-dst-mach 32 op suffix opc32-1 opc32-2 opc32-3 sem)
6098 )
6099)
6100
6101;-------------------------------------------------------------
6102;<arith>.size:Q #imm4,dst -- for m16c and m32c
6103;-------------------------------------------------------------
6104
6105(define-pmacro (binary-arith-imm4-dst-defn mach src dstgroup mode wstr op encoding sem)
6106 (dni (.sym op mach wstr - imm4-Q - dstgroup)
6107 (.str op wstr " " mach "-imm4-Q-" dstgroup "-" mode)
6108 ((machine mach))
6109 (.str op wstr "$Q #${" src "},${dst" mach "-" dstgroup "-" mode "}")
6110 encoding
6111 (sem mode src (.sym dst mach - dstgroup - mode))
6112 ())
6113)
6114
6115; m16c variants
6116(define-pmacro (binary-arith16-imm4-dst-defn mode wstr wbit1 wbit2 op opc1 opc2 sem)
6117 (binary-arith-imm4-dst-defn 16 Imm-8-s4 16 mode wstr op
6118 (+ opc1 opc2 (f-7-1 wbit2) Imm-8-s4 (.sym dst16-16- mode))
6119 sem)
6120)
6121
6122(define-pmacro (binary-arith16-shimm4-dst-defn mode wstr wbit1 wbit2 op opc1 opc2 sem)
6123 (binary-arith-imm4-dst-defn 16 Imm-sh-8-s4 16 mode wstr op
6124 (+ opc1 opc2 (f-7-1 wbit2) Imm-sh-8-s4 (.sym dst16-16- mode))
6125 sem)
6126)
6127
6128; m32c variants
6129(define-pmacro (binary-arith32-imm4-dst-defn mode wstr wbit1 wbit2 op opc1 opc2 sem)
6130 (begin
6131 ; Multi insns are tried for assembly in the reverse order in which they appear here, so
6132 ; define the absolute-indirect insns first in order to prevent them from being selected
6133 ; when the mode is register-indirect
6134; (binary-arith-imm4-dst-defn 32 Imm-20-s4 24-absolute-indirect mode wstr op
6135; (+ (f-0-4 0) (f-4-4 9) (f-8-3 opc1) (f-11-1 wbit1) (f-15-1 wbit2) (.sym dst32-24-absolute-indirect- mode) (f-18-2 opc2) Imm-20-s4)
6136; sem)
6137 (binary-arith-imm4-dst-defn 32 Imm-12-s4 16-Unprefixed mode wstr op
6138 (+ (f-0-3 opc1) (f-3-1 wbit1) (f-7-1 wbit2) (.sym dst32-16-Unprefixed- mode) (f-10-2 opc2) Imm-12-s4)
6139 sem)
6140; (binary-arith-imm4-dst-defn 32 Imm-20-s4 24-indirect mode wstr op
6141; (+ (f-0-4 0) (f-4-4 9) (f-8-3 opc1) (f-11-1 wbit1) (f-15-1 wbit2) (.sym dst32-24-indirect- mode) (f-18-2 opc2) Imm-20-s4)
6142; sem)
6143 )
6144)
6145
6146(define-pmacro (binary-arith32-shimm4-dst-defn mode wstr wbit1 wbit2 op opc1 opc2 sem)
6147 (begin
6148 ; Multi insns are tried for assembly in the reverse order in which they appear here, so
6149 ; define the absolute-indirect insns first in order to prevent them from being selected
6150 ; when the mode is register-indirect
6151; (binary-arith-imm4-dst-defn 32 Imm-sh-20-s4 24-absolute-indirect mode wstr op
6152; (+ (f-0-4 0) (f-4-4 9) (f-8-3 opc1) (f-11-1 wbit1) (f-15-1 wbit2) (.sym dst32-24-absolute-indirect- mode) (f-18-2 opc2) Imm-sh-20-s4)
6153; sem)
6154 (binary-arith-imm4-dst-defn 32 Imm-sh-12-s4 16-Unprefixed mode wstr op
6155 (+ (f-0-3 opc1) (f-3-1 wbit1) (f-7-1 wbit2) (.sym dst32-16-Unprefixed- mode) (f-10-2 opc2) Imm-sh-12-s4)
6156 sem)
6157; (binary-arith-imm4-dst-defn 32 Imm-sh-20-s4 24-indirect mode wstr op
6158; (+ (f-0-4 0) (f-4-4 9) (f-8-3 opc1) (f-11-1 wbit1) (f-15-1 wbit2) (.sym dst32-24-indirect- mode) (f-18-2 opc2) Imm-sh-20-s4)
6159; sem)
6160 )
6161)
6162
6163(define-pmacro (binary-arith-imm4-dst-mach mach op opc1 opc2 sem)
6164 (begin
6165 (.apply (.sym binary-arith mach -imm4-dst-defn) (QI .b 0 0 op opc1 opc2 sem))
6166 (.apply (.sym binary-arith mach -imm4-dst-defn) (HI .w 0 1 op opc1 opc2 sem))
6167 )
6168)
6169
6170(define-pmacro (binary-arith-imm4-dst op opc16-1 opc16-2 opc32-1 opc32-2 sem)
6171 (begin
6172 (binary-arith-imm4-dst-mach 16 op opc16-1 opc16-2 sem)
6173 (binary-arith-imm4-dst-mach 32 op opc32-1 opc32-2 sem)
6174 )
6175)
6176
6177;-------------------------------------------------------------
6178;<arith>.size:G src,dst -- for m16c and m32c
6179;-------------------------------------------------------------
6180
6181(define-pmacro (binary-arith-src-dst-defn mach srcgroup dstgroup smode dmode wstr op suffix encoding sem)
6182 (dni (.sym op mach wstr - srcgroup - dstgroup)
6183 (.str op wstr " dst" mach "-" srcgroup "-" dstgroup "-" dmode)
6184 ((machine mach))
6185 (.str op wstr "$" suffix " ${src" mach "-" srcgroup "-" smode "},${dst" mach "-" dstgroup "-" dmode "}")
6186 encoding
6187 (sem dmode (.sym src mach - srcgroup - smode) (.sym dst mach - dstgroup - dmode))
6188 ())
6189)
6190
6191; m16c variants
6192(define-pmacro (binary-arith16-src-dst-defn smode dmode wstr wbit op suffix opc1 opc2 sem)
6193 (begin
6194 (binary-arith-src-dst-defn 16 basic 16 smode dmode wstr op suffix
6195 (+ opc1 opc2 (f-7-1 wbit) (.sym src16-basic- smode) (.sym dst16-16- dmode))
6196 sem)
6197 (binary-arith-src-dst-defn 16 16-16 32 smode dmode wstr op suffix
6198 (+ opc1 opc2 (f-7-1 wbit) (.sym src16-16-16- smode) (.sym dst16-32- dmode))
6199 sem)
6200 (binary-arith-src-dst-defn 16 16-8 24 smode dmode wstr op suffix
6201 (+ opc1 opc2 (f-7-1 wbit) (.sym src16-16-8- smode) (.sym dst16-24- dmode))
6202 sem)
6203 )
6204)
6205
6206; m32c Prefixed variants
6207(define-pmacro (binary-arith32-src-dst-Prefixed smode dmode wstr wbit op suffix opc1 opc2 sem)
6208 (begin
6209 (binary-arith-src-dst-defn 32 basic-Prefixed 24-Prefixed smode dmode wstr op suffix
6210 (+ (f-0-4 0) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit) (.sym src32-basic-Prefixed- smode) (.sym dst32-24-Prefixed- dmode) (f-20-4 opc2))
6211 sem)
6212 (binary-arith-src-dst-defn 32 24-24-Prefixed 48-Prefixed smode dmode wstr op suffix
6213 (+ (f-0-4 0) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit) (.sym src32-24-24-Prefixed- smode) (.sym dst32-48-Prefixed- dmode) (f-20-4 opc2))
6214 sem)
6215 (binary-arith-src-dst-defn 32 24-16-Prefixed 40-Prefixed smode dmode wstr op suffix
6216 (+ (f-0-4 0) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit) (.sym src32-24-16-Prefixed- smode) (.sym dst32-40-Prefixed- dmode) (f-20-4 opc2))
6217 sem)
6218 (binary-arith-src-dst-defn 32 24-8-Prefixed 32-Prefixed smode dmode wstr op suffix
6219 (+ (f-0-4 0) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit) (.sym src32-24-8-Prefixed- smode) (.sym dst32-32-Prefixed- dmode) (f-20-4 opc2))
6220 sem)
6221 )
6222)
6223
6224; all m32c variants
6225(define-pmacro (binary-arith32-src-dst-defn smode dmode wstr wbit op suffix opc1 opc2 sem)
6226 (begin
6227 ; Multi insns are tried for assembly in the reverse order in which they appear here, so
6228 ; define the absolute-indirect insns first in order to prevent them from being selected
6229 ; when the mode is register-indirect
6230; (binary-arith-src-dst-defn 32 24-24-absolute-indirect 48-absolute-indirect smode dmode wstr op suffix
6231; (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
6232; (.sym src32-24-24-absolute-indirect- smode) (.sym dst32-48-absolute-indirect- dmode) (f-20-4 opc2))
6233; sem)
6234; (binary-arith-src-dst-defn 32 24-16-absolute-indirect 40-absolute-indirect smode dmode wstr op suffix
6235; (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
6236; (.sym src32-24-16-absolute-indirect- smode) (.sym dst32-40-absolute-indirect- dmode) (f-20-4 opc2))
6237; sem)
6238; (binary-arith-src-dst-defn 32 24-24-absolute-indirect 48-Prefixed smode dmode wstr op suffix
6239; (+ (f-0-4 4) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit)
6240; (.sym src32-24-24-absolute-indirect- smode) (.sym dst32-48-Prefixed- dmode) (f-20-4 opc2))
6241; sem)
6242; (binary-arith-src-dst-defn 32 24-16-absolute-indirect 40-Prefixed smode dmode wstr op suffix
6243; (+ (f-0-4 4) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit)
6244; (.sym src32-24-16-absolute-indirect- smode) (.sym dst32-40-Prefixed- dmode) (f-20-4 opc2))
6245; sem)
6246; (binary-arith-src-dst-defn 32 24-24-absolute-indirect 48-indirect smode dmode wstr op suffix
6247; (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
6248; (.sym src32-24-24-absolute-indirect- smode) (.sym dst32-48-indirect- dmode) (f-20-4 opc2))
6249; sem)
6250; (binary-arith-src-dst-defn 32 24-16-absolute-indirect 40-indirect smode dmode wstr op suffix
6251; (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
6252; (.sym src32-24-16-absolute-indirect- smode) (.sym dst32-40-indirect- dmode) (f-20-4 opc2))
6253; sem)
6254; (binary-arith-src-dst-defn 32 basic-Prefixed 24-absolute-indirect smode dmode wstr op suffix
6255; (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
6256; (.sym src32-basic-Prefixed- smode) (.sym dst32-24-absolute-indirect- dmode) (f-20-4 opc2))
6257; sem)
6258; (binary-arith-src-dst-defn 32 24-24-Prefixed 48-absolute-indirect smode dmode wstr op suffix
6259; (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
6260; (.sym src32-24-24-Prefixed- smode) (.sym dst32-48-absolute-indirect- dmode) (f-20-4 opc2))
6261; sem)
6262; (binary-arith-src-dst-defn 32 24-16-Prefixed 40-absolute-indirect smode dmode wstr op suffix
6263; (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
6264; (.sym src32-24-16-Prefixed- smode) (.sym dst32-40-absolute-indirect- dmode) (f-20-4 opc2))
6265; sem)
6266; (binary-arith-src-dst-defn 32 24-8-Prefixed 32-absolute-indirect smode dmode wstr op suffix
6267; (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
6268; (.sym src32-24-8-Prefixed- smode) (.sym dst32-32-absolute-indirect- dmode) (f-20-4 opc2))
6269; sem)
6270; (binary-arith-src-dst-defn 32 basic-indirect 24-absolute-indirect smode dmode wstr op suffix
6271; (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
6272; (.sym src32-basic-indirect- smode) (.sym dst32-24-absolute-indirect- dmode) (f-20-4 opc2))
6273; sem)
6274; (binary-arith-src-dst-defn 32 24-24-indirect 48-absolute-indirect smode dmode wstr op suffix
6275; (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
6276; (.sym src32-24-24-indirect- smode) (.sym dst32-48-absolute-indirect- dmode) (f-20-4 opc2))
6277; sem)
6278; (binary-arith-src-dst-defn 32 24-16-indirect 40-absolute-indirect smode dmode wstr op suffix
6279; (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
6280; (.sym src32-24-16-indirect- smode) (.sym dst32-40-absolute-indirect- dmode) (f-20-4 opc2))
6281; sem)
6282; (binary-arith-src-dst-defn 32 24-8-indirect 32-absolute-indirect smode dmode wstr op suffix
6283; (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
6284; (.sym src32-24-8-indirect- smode) (.sym dst32-32-absolute-indirect- dmode) (f-20-4 opc2))
6285; sem)
6286 (binary-arith-src-dst-defn 32 basic-Unprefixed 16-Unprefixed smode dmode wstr op suffix
6287 (+ (f-0-1 opc1) (f-7-1 wbit) (.sym src32-basic-Unprefixed- smode) (.sym dst32-16-Unprefixed- dmode) (f-12-4 opc2))
6288 sem)
6289 (binary-arith-src-dst-defn 32 16-24-Unprefixed 40-Unprefixed smode dmode wstr op suffix
6290 (+ (f-0-1 opc1) (f-7-1 wbit) (.sym src32-16-24-Unprefixed- smode) (.sym dst32-40-Unprefixed- dmode) (f-12-4 opc2))
6291 sem)
6292 (binary-arith-src-dst-defn 32 16-16-Unprefixed 32-Unprefixed smode dmode wstr op suffix
6293 (+ (f-0-1 opc1) (f-7-1 wbit) (.sym src32-16-16-Unprefixed- smode) (.sym dst32-32-Unprefixed- dmode) (f-12-4 opc2))
6294 sem)
6295 (binary-arith-src-dst-defn 32 16-8-Unprefixed 24-Unprefixed smode dmode wstr op suffix
6296 (+ (f-0-1 opc1) (f-7-1 wbit) (.sym src32-16-8-Unprefixed- smode) (.sym dst32-24-Unprefixed- dmode) (f-12-4 opc2))
6297 sem)
6298; (binary-arith-src-dst-defn 32 basic-indirect 24-Prefixed smode dmode wstr op suffix
6299; (+ (f-0-4 4) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit)
6300; (.sym src32-basic-indirect- smode) (.sym dst32-24-Prefixed- dmode) (f-20-4 opc2))
6301; sem)
6302; (binary-arith-src-dst-defn 32 24-24-indirect 48-Prefixed smode dmode wstr op suffix
6303; (+ (f-0-4 4) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit)
6304; (.sym src32-24-24-indirect- smode) (.sym dst32-48-Prefixed- dmode) (f-20-4 opc2))
6305; sem)
6306; (binary-arith-src-dst-defn 32 24-16-indirect 40-Prefixed smode dmode wstr op suffix
6307; (+ (f-0-4 4) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit)
6308; (.sym src32-24-16-indirect- smode) (.sym dst32-40-Prefixed- dmode) (f-20-4 opc2))
6309; sem)
6310; (binary-arith-src-dst-defn 32 24-8-indirect 32-Prefixed smode dmode wstr op suffix
6311; (+ (f-0-4 4) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit)
6312; (.sym src32-24-8-indirect- smode) (.sym dst32-32-Prefixed- dmode) (f-20-4 opc2))
6313; sem)
6314; (binary-arith-src-dst-defn 32 basic-Prefixed 24-indirect smode dmode wstr op suffix
6315; (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
6316; (.sym src32-basic-Prefixed- smode) (.sym dst32-24-indirect- dmode) (f-20-4 opc2))
6317; sem)
6318; (binary-arith-src-dst-defn 32 24-24-Prefixed 48-indirect smode dmode wstr op suffix
6319; (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
6320; (.sym src32-24-24-Prefixed- smode) (.sym dst32-48-indirect- dmode) (f-20-4 opc2))
6321; sem)
6322; (binary-arith-src-dst-defn 32 24-16-Prefixed 40-indirect smode dmode wstr op suffix
6323; (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
6324; (.sym src32-24-16-Prefixed- smode) (.sym dst32-40-indirect- dmode) (f-20-4 opc2))
6325; sem)
6326; (binary-arith-src-dst-defn 32 24-8-Prefixed 32-indirect smode dmode wstr op suffix
6327; (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
6328; (.sym src32-24-8-Prefixed- smode) (.sym dst32-32-indirect- dmode) (f-20-4 opc2))
6329; sem)
6330; (binary-arith-src-dst-defn 32 basic-indirect 24-indirect smode dmode wstr op suffix
6331; (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
6332; (.sym src32-basic-indirect- smode) (.sym dst32-24-indirect- dmode) (f-20-4 opc2))
6333; sem)
6334; (binary-arith-src-dst-defn 32 24-24-indirect 48-indirect smode dmode wstr op suffix
6335; (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
6336; (.sym src32-24-24-indirect- smode) (.sym dst32-48-indirect- dmode) (f-20-4 opc2))
6337; sem)
6338; (binary-arith-src-dst-defn 32 24-16-indirect 40-indirect smode dmode wstr op suffix
6339; (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
6340; (.sym src32-24-16-indirect- smode) (.sym dst32-40-indirect- dmode) (f-20-4 opc2))
6341; sem)
6342; (binary-arith-src-dst-defn 32 24-8-indirect 32-indirect smode dmode wstr op suffix
6343; (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
6344; (.sym src32-24-8-indirect- smode) (.sym dst32-32-indirect- dmode) (f-20-4 opc2))
6345; sem)
6346 )
6347)
6348
6349(define-pmacro (binary-arith-src-dst-mach mach op suffix opc1 opc2 sem)
6350 (begin
6351 (.apply (.sym binary-arith mach -src-dst-defn) (QI QI .b 0 op suffix opc1 opc2 sem))
6352 (.apply (.sym binary-arith mach -src-dst-defn) (HI HI .w 1 op suffix opc1 opc2 sem))
6353 )
6354)
6355
6356(define-pmacro (binary-arith-src-dst op suffix opc16-1 opc16-2 opc32-1 opc32-2 sem)
6357 (begin
6358 (binary-arith-src-dst-mach 16 op suffix opc16-1 opc16-2 sem)
6359 (binary-arith-src-dst-mach 32 op suffix opc32-1 opc32-2 sem)
6360 )
6361)
6362
6363;-------------------------------------------------------------
6364;<arith>.size:S #imm,dst -- for m32c
6365;-------------------------------------------------------------
6366
6367(define-pmacro (binary-arith32-s-imm-dst-defn src dstgroup mode wstr op encoding sem)
6368 (dni (.sym op 32 wstr - imm-S - dstgroup)
6369 (.str op wstr " 32-imm-S-" dstgroup "-" mode)
6370 ((machine 32))
6371 (.str op wstr "$S #${" src "},${dst32-" dstgroup "-" mode "}")
6372 encoding
6373 (sem mode src (.sym dst32- dstgroup - mode))
6374 ())
6375)
6376
6377(define-pmacro (binary-arith32-z-imm-dst-defn src dstgroup mode wstr op encoding sem)
6378 (dni (.sym op 32 wstr - imm-Z - dstgroup)
6379 (.str op wstr " 32-imm-Z-" dstgroup "-" mode)
6380 ((machine 32))
6381 (.str op wstr "$Z #0,${dst32-" dstgroup "-" mode "}")
6382 encoding
6383 (sem mode (const 0) (.sym dst32- dstgroup - mode))
6384 ())
6385)
6386
6387(define-pmacro (binary-arith32-s-imm-dst mode wstr wbit op opc1 opc2 sem)
6388 (begin
6389; (binary-arith32-s-imm-dst-defn (.sym Imm-32- mode) 2-S-absolute-indirect mode wstr op
6390; (+ (f-0-4 0) (f-4-4 9) (f-8-2 opc1) (.sym dst32-2-S-absolute-indirect- mode) (f-12-3 opc2) (f-15-1 wbit) (.sym Imm-32- mode))
6391; sem)
6392 (binary-arith32-s-imm-dst-defn (.sym Imm-8- mode) 2-S-basic mode wstr op
6393 (+ (f-0-2 opc1) (.sym dst32-2-S-basic- mode) (f-4-3 opc2) (f-7-1 wbit) (.sym Imm-8- mode))
6394 sem)
6395 (binary-arith32-s-imm-dst-defn (.sym Imm-24- mode) 2-S-16 mode wstr op
6396 (+ (f-0-2 opc1) (.sym dst32-2-S-16- mode) (f-4-3 opc2) (f-7-1 wbit) (.sym Imm-24- mode))
6397 sem)
6398 (binary-arith32-s-imm-dst-defn (.sym Imm-16- mode) 2-S-8 mode wstr op
6399 (+ (f-0-2 opc1) (.sym dst32-2-S-8- mode) (f-4-3 opc2) (f-7-1 wbit) (.sym Imm-16- mode))
6400 sem)
6401; (binary-arith32-s-imm-dst-defn (.sym Imm-24- mode) 2-S-8-indirect mode wstr op
6402; (+ (f-0-4 0) (f-4-4 9) (f-8-2 opc1) (.sym dst32-2-S-8-indirect- mode) (f-12-3 opc2) (f-15-1 wbit) (.sym Imm-24- mode))
6403; sem)
6404 )
6405)
6406
6407(define-pmacro (binary-arith32-z-imm-dst mode wstr wbit op opc1 opc2 sem)
6408 (begin
6409; (binary-arith32-z-imm-dst-defn (.sym Imm-32- mode) 2-S-absolute-indirect mode wstr op
6410; (+ (f-0-4 0) (f-4-4 9) (f-8-2 opc1) (.sym dst32-2-S-absolute-indirect- mode) (f-12-3 opc2) (f-15-1 wbit) (.sym Imm-32- mode))
6411; sem)
6412 (binary-arith32-z-imm-dst-defn (.sym Imm-8- mode) 2-S-basic mode wstr op
6413 (+ (f-0-2 opc1) (.sym dst32-2-S-basic- mode) (f-4-3 opc2) (f-7-1 wbit))
6414 sem)
6415 (binary-arith32-z-imm-dst-defn (.sym Imm-24- mode) 2-S-16 mode wstr op
6416 (+ (f-0-2 opc1) (.sym dst32-2-S-16- mode) (f-4-3 opc2) (f-7-1 wbit))
6417 sem)
6418 (binary-arith32-z-imm-dst-defn (.sym Imm-16- mode) 2-S-8 mode wstr op
6419 (+ (f-0-2 opc1) (.sym dst32-2-S-8- mode) (f-4-3 opc2) (f-7-1 wbit))
6420 sem)
6421; (binary-arith32-z-imm-dst-defn (.sym Imm-24- mode) 2-S-8-indirect mode wstr op
6422; (+ (f-0-4 0) (f-4-4 9) (f-8-2 opc1) (.sym dst32-2-S-8-indirect- mode) (f-12-3 opc2) (f-15-1 wbit) (.sym Imm-24- mode))
6423; sem)
6424 )
6425)
6426
6427;-------------------------------------------------------------
6428;<arith>.L:S #imm1,An -- for m32c
6429;-------------------------------------------------------------
6430
6431(define-pmacro (binary-arith32-l-s-imm1-an op opc1 opc2 sem)
6432 (begin
6433 (dni (.sym op 32.l-s-imm1-S-an)
6434 (.str op ".l 32-imm1-S-an")
6435 ((machine 32))
6436 (.str op ".l$S #${Imm1-S},${dst32-an-S}")
6437 (+ opc1 Imm1-S opc2 dst32-an-S)
6438 (sem SI Imm1-S dst32-an-S)
6439 ())
6440 )
6441)
6442
6443;-------------------------------------------------------------
6444;<arith>.L:Q #imm3,sp -- for m32c
6445;-------------------------------------------------------------
6446
6447(define-pmacro (binary-arith32-l-q-imm3-sp op opc1 opc2 sem)
6448 (begin
6449 (dni (.sym op 32.l-imm3-Q)
6450 (.str op ".l 32-imm3-Q")
6451 ((machine 32))
6452 (.str op ".l$Q #${Imm3-S},sp")
6453 (+ opc1 Imm3-S opc2)
6454 (sem SI Imm3-S sp)
6455 ())
6456 )
6457)
6458
6459;-------------------------------------------------------------
6460;<arith>.L:S #imm8,sp -- for m32c
6461;-------------------------------------------------------------
6462
6463(define-pmacro (binary-arith32-l-s-imm8-sp op opc1 opc2 opc3 opc4 sem)
6464 (begin
6465 (dni (.sym op 32.l-imm8-S)
6466 (.str op ".l 32-imm8-S")
6467 ((machine 32))
6468 (.str op ".l$S #${Imm-16-QI},sp")
6469 (+ opc1 opc2 opc3 opc4 Imm-16-QI)
6470 (sem SI Imm-16-QI sp)
6471 ())
6472 )
6473)
6474
6475;-------------------------------------------------------------
6476;<arith>.L:G #imm16,sp -- for m32c
6477;-------------------------------------------------------------
6478
6479(define-pmacro (binary-arith32-l-g-imm16-sp op opc1 opc2 opc3 opc4 sem)
6480 (begin
6481 (dni (.sym op 32.l-imm16-G)
6482 (.str op ".l 32-imm16-G")
6483 ((machine 32))
6484 (.str op ".l$G #${Imm-16-HI},sp")
6485 (+ opc1 opc2 opc3 opc4 Imm-16-HI)
6486 (sem SI Imm-16-HI sp)
6487 ())
6488 )
6489)
6490
6491;-------------------------------------------------------------
6492;<arith>jnz.size #imm4,dst,label -- for m16c and m32c
6493;-------------------------------------------------------------
6494
6495(define-pmacro (arith-jnz-imm4-dst-defn mach src dstgroup label mode wstr op encoding sem)
6496 (dni (.sym op mach wstr - imm4 - dstgroup)
6497 (.str op wstr " " mach "-imm4-" dstgroup "-" label "-" mode)
6498 ((machine mach))
6499 (.str op wstr " #${" src "},${dst" mach "-" dstgroup "-" mode "},${" label "}")
6500 encoding
6501 (sem mode src (.sym dst mach - dstgroup - mode) label)
6502 ())
6503)
6504
6505; m16c variants
6506(define-pmacro (arith-jnz16-imm4-dst-defn mode wstr wbit op opc1 opc2 sem)
6507 (begin
6508 (arith-jnz-imm4-dst-defn 16 Imm-8-s4 basic Lab-16-8 mode wstr op
6509 (+ opc1 opc2 (f-7-1 wbit) Imm-8-s4 (.sym dst16-basic- mode) Lab-16-8)
6510 sem)
6511 (arith-jnz-imm4-dst-defn 16 Imm-8-s4 16-16 Lab-32-8 mode wstr op
6512 (+ opc1 opc2 (f-7-1 wbit) Imm-8-s4 (.sym dst16-16-16- mode) Lab-16-8)
6513 sem)
6514 (arith-jnz-imm4-dst-defn 16 Imm-8-s4 16-8 Lab-24-8 mode wstr op
6515 (+ opc1 opc2 (f-7-1 wbit) Imm-8-s4 (.sym dst16-16-8- mode) Lab-16-8)
6516 sem)
6517 )
6518)
6519
6520; m32c variants
6521(define-pmacro (arith-jnz32-imm4-dst-defn mode wstr wbit op opc1 opc2 sem)
6522 (begin
6523 (arith-jnz-imm4-dst-defn 32 Imm-12-s4 basic-Unprefixed Lab-16-8 mode wstr op
6524 (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-basic-Unprefixed- mode) (f-10-2 opc2) Imm-12-s4 Lab-16-8)
6525 sem)
6526 (arith-jnz-imm4-dst-defn 32 Imm-12-s4 16-24-Unprefixed Lab-40-8 mode wstr op
6527 (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-24-Unprefixed- mode) (f-10-2 opc2) Imm-12-s4 Lab-40-8)
6528 sem)
6529 (arith-jnz-imm4-dst-defn 32 Imm-12-s4 16-16-Unprefixed Lab-32-8 mode wstr op
6530 (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-16-Unprefixed- mode) (f-10-2 opc2) Imm-12-s4 Lab-32-8)
6531 sem)
6532 (arith-jnz-imm4-dst-defn 32 Imm-12-s4 16-8-Unprefixed Lab-24-8 mode wstr op
6533 (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-8-Unprefixed- mode) (f-10-2 opc2) Imm-12-s4 Lab-24-8)
6534 sem)
6535 )
6536)
6537
6538(define-pmacro (arith-jnz-imm4-dst-mach mach op opc1 opc2 sem)
6539 (begin
6540 (.apply (.sym arith-jnz mach -imm4-dst-defn) (QI .b 0 op opc1 opc2 sem))
6541 (.apply (.sym arith-jnz mach -imm4-dst-defn) (HI .w 1 op opc1 opc2 sem))
6542 )
6543)
6544
6545(define-pmacro (arith-jnz-imm4-dst op opc16-1 opc16-2 opc32-1 opc32-2 sem)
6546 (begin
6547 (arith-jnz-imm4-dst-mach 16 op opc16-1 opc16-2 sem)
6548 (arith-jnz-imm4-dst-mach 32 op opc32-1 opc32-2 sem)
6549 )
6550)
6551
6552;-------------------------------------------------------------
6553;mov.size dsp8[sp],dst -- for m16c and m32c
6554;-------------------------------------------------------------
6555(define-pmacro (mov-dspsp-dst-defn mach dstgroup dsp mode wstr op encoding sem)
6556 (dni (.sym op mach wstr -dspsp-dst- dstgroup)
6557 (.str op wstr " " mach "-dsp[sp]-" dstgroup "-" dsp "-" mode)
6558 ((machine mach))
6559 (.str op wstr " ${" dsp "}[sp],${dst" mach "-" dstgroup "-" mode "}")
6560 encoding
6561 (sem mach mode dsp (.sym dst mach - dstgroup - mode))
6562 ())
6563)
6564(define-pmacro (mov-src-dspsp-defn mach dstgroup dsp mode wstr op encoding sem)
6565 (dni (.sym op mach wstr -dst-dspsp- dstgroup)
6566 (.str op wstr " " mach "-dsp[sp]-" dstgroup "-" dsp "-" mode)
6567 ((machine mach))
6568 (.str op wstr " ${dst" mach "-" dstgroup "-" mode "},${" dsp "}[sp]")
6569 encoding
6570 (sem mach mode (.sym dst mach - dstgroup - mode) dsp)
6571 ())
6572)
6573
6574; m16c variants
6575(define-pmacro (mov16-dspsp-dst-defn mode wstr wbit op opc1 opc2 opc3 sem)
6576 (begin
6577 (mov-dspsp-dst-defn 16 basic Dsp-16-u8 mode wstr op
6578 (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-basic- mode) Dsp-16-u8)
6579 sem)
6580 (mov-dspsp-dst-defn 16 16-16 Dsp-32-u8 mode wstr op
6581 (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-16- mode) Dsp-32-u8)
6582 sem)
6583 (mov-dspsp-dst-defn 16 16-8 Dsp-24-u8 mode wstr op
6584 (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-8- mode) Dsp-24-u8)
6585 sem)
6586 )
6587)
6588
6589(define-pmacro (mov16-src-dspsp-defn mode wstr wbit op opc1 opc2 opc3 sem)
6590 (begin
6591 (mov-src-dspsp-defn 16 basic Dsp-16-u8 mode wstr op
6592 (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-basic- mode) Dsp-16-u8)
6593 sem)
6594 (mov-src-dspsp-defn 16 16-16 Dsp-32-u8 mode wstr op
6595 (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-16- mode) Dsp-32-u8)
6596 sem)
6597 (mov-src-dspsp-defn 16 16-8 Dsp-24-u8 mode wstr op
6598 (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-8- mode) Dsp-24-u8)
6599 sem)
6600 )
6601)
6602
6603; m32c variants
6604(define-pmacro (mov32-dspsp-dst-defn mode wstr wbit op opc1 opc2 opc3 sem)
6605 (begin
6606 (mov-dspsp-dst-defn 32 basic-Unprefixed Dsp-16-u8 mode wstr op
6607 (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-basic-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-16-u8)
6608 sem)
6609 (mov-dspsp-dst-defn 32 16-24-Unprefixed Dsp-40-u8 mode wstr op
6610 (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-24-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-40-u8)
6611 sem)
6612 (mov-dspsp-dst-defn 32 16-16-Unprefixed Dsp-32-u8 mode wstr op
6613 (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-16-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-32-u8)
6614 sem)
6615 (mov-dspsp-dst-defn 32 16-8-Unprefixed Dsp-24-u8 mode wstr op
6616 (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-8-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-24-u8)
6617 sem)
6618 )
6619)
6620(define-pmacro (mov32-src-dspsp-defn mode wstr wbit op opc1 opc2 opc3 sem)
6621 (begin
6622 (mov-src-dspsp-defn 32 basic-Unprefixed Dsp-16-u8 mode wstr op
6623 (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-basic-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-16-u8)
6624 sem)
6625 (mov-src-dspsp-defn 32 16-24-Unprefixed Dsp-40-u8 mode wstr op
6626 (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-24-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-40-u8)
6627 sem)
6628 (mov-src-dspsp-defn 32 16-16-Unprefixed Dsp-32-u8 mode wstr op
6629 (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-16-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-32-u8)
6630 sem)
6631 (mov-src-dspsp-defn 32 16-8-Unprefixed Dsp-24-u8 mode wstr op
6632 (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-8-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-24-u8)
6633 sem)
6634 )
6635)
6636
6637(define-pmacro (mov-src-dspsp-mach mach op opc1 opc2 opc3 sem)
6638 (begin
6639 (.apply (.sym mov mach -src-dspsp-defn) (QI .b 0 op opc1 opc2 opc3 sem))
6640 (.apply (.sym mov mach -src-dspsp-defn) (HI .w 1 op opc1 opc2 opc3 sem))
6641 )
6642)
6643
6644(define-pmacro (mov-dspsp-dst-mach mach op opc1 opc2 opc3 sem)
6645 (begin
6646 (.apply (.sym mov mach -dspsp-dst-defn) (QI .b 0 op opc1 opc2 opc3 sem))
6647 (.apply (.sym mov mach -dspsp-dst-defn) (HI .w 1 op opc1 opc2 opc3 sem))
6648 )
6649)
6650
6651(define-pmacro (mov-dspsp-dst op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
6652 (begin
6653 (mov-dspsp-dst-mach 16 op opc16-1 opc16-2 opc16-3 sem)
6654 (mov-dspsp-dst-mach 32 op opc32-1 opc32-2 opc32-3 sem)
6655 )
6656)
6657(define-pmacro (mov-src-dspsp op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
6658 (begin
6659 (mov-src-dspsp-mach 16 op opc16-1 opc16-2 opc16-3 sem)
6660 (mov-src-dspsp-mach 32 op opc32-1 opc32-2 opc32-3 sem)
6661 )
6662)
6663
6664;-------------------------------------------------------------
6665; lde dsp24,dst -- for m16c
6666; TODO abs20[a0], [a0a1] for dsp24
6667;-------------------------------------------------------------
6668
6669(define-pmacro (lde-defn mach dstgroup dsp mode wstr op encoding sem)
6670 (dni (.sym op mach wstr -dst-dspsp- dstgroup)
6671 (.str op wstr " " mach "-dsp[sp]-" dstgroup "-" dsp "-" mode)
6672 ((machine mach))
6673 (.str op wstr " ${" dsp "},${dst" mach "-" dstgroup "-" mode "}")
6674 encoding
6675 (sem mode (.sym dst mach - dstgroup - mode) dsp)
6676 ())
6677)
6678
6679(define-pmacro (lde-dst mode wstr wbit op opc1 opc2 opc3 sem)
6680 (begin
6681 (lde-defn 16 basic Dsp-16-u20 mode wstr op
6682 (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-basic- mode) Dsp-16-u20)
6683 sem)
6684 (lde-defn 16 16-16 Dsp-32-u20 mode wstr op
6685 (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-16- mode) Dsp-32-u20)
6686 sem)
6687 (lde-defn 16 16-8 Dsp-24-u20 mode wstr op
6688 (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-8- mode) Dsp-24-u20)
6689 sem)
6690 )
6691)
6692
6693;-------------------------------------------------------------
6694; ste src,dsp24 -- for m16c
6695; TODO abs20[a0], [a0a1] for dsp24
6696;-------------------------------------------------------------
6697
6698(define-pmacro (ste-defn mach dstgroup dsp mode wstr op encoding sem)
6699 (dni (.sym op mach wstr -dst-dspsp- dstgroup)
6700 (.str op wstr " " mach "-dsp[sp]-" dstgroup "-" dsp "-" mode)
6701 ((machine mach))
6702 (.str op wstr " ${dst" mach "-" dstgroup "-" mode "},${" dsp "}")
6703 encoding
6704 (sem mode (.sym dst mach - dstgroup - mode) dsp)
6705 ())
6706)
6707
6708(define-pmacro (ste-dst mode wstr wbit op opc1 opc2 opc3 sem)
6709 (begin
6710 (ste-defn 16 basic Dsp-16-u20 mode wstr op
6711 (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-basic- mode) Dsp-16-u20)
6712 sem)
6713 (ste-defn 16 16-16 Dsp-32-u20 mode wstr op
6714 (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-16- mode) Dsp-32-u20)
6715 sem)
6716 (ste-defn 16 16-8 Dsp-24-u20 mode wstr op
6717 (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-8- mode) Dsp-24-u20)
6718 sem)
6719 )
6720)
6721
6722;=============================================================
6723; Division
6724;-------------------------------------------------------------
6725
6726(define-pmacro (div-sem divop modop opmode reg src quot rem max min)
6727 (sequence ()
6728 (if (eq src 0)
6729 (set obit (const BI 1))
6730 (sequence ((opmode quot-result) (opmode rem-result))
6731 (set quot-result (divop opmode (ext opmode reg) src))
6732 (set rem-result (modop opmode (ext opmode reg) src))
6733 (set obit (orif (gt opmode quot-result max)
6734 (lt opmode quot-result min)))
6735 (set quot quot-result)
6736 (set rem rem-result))))
6737)
6738
6739;<divop>.size #imm -- for m16c and m32c
6740(define-pmacro (div-imm-defn mach wstr op src encoding divop modop opmode reg quot rem max min sem)
6741 (dni (.sym op mach wstr - src)
6742 (.str op mach wstr "-" src)
6743 ((machine mach))
6744 (.str op wstr " #${" src "}")
6745 encoding
6746 (sem divop modop opmode reg src quot rem max min)
6747 ())
6748)
6749(define-pmacro (div16-imm-defn smode wstr wbit op divop modop opmode reg quot rem max min opc1 opc2 opc3 opc4 sem)
6750 (div-imm-defn 16 wstr op (.sym Imm-16 - smode)
6751 (+ opc1 opc2 (f-7-1 wbit) opc3 opc4 (.sym Imm-16 - smode))
6752 divop modop opmode reg quot rem max min
6753 sem)
6754)
6755(define-pmacro (div32-imm-defn smode wstr wbit op divop modop opmode reg quot rem max min opc1 opc2 opc3 opc4 sem)
6756 (div-imm-defn 32 wstr op (.sym Imm-16 - smode)
6757 (+ (f-0-4 opc1) (f-4-4 opc2) (f-8-3 opc3) (f-11-1 wbit) (f-12-4 opc4) (.sym Imm-16 - smode))
6758 divop modop opmode reg quot rem max min
6759 sem)
6760)
6761(define-pmacro (div-imm-mach mach op divop modop opmode max-QI min-QI max-HI min-HI opc1 opc2 opc3 opc4 sem)
6762 (begin
6763 (.apply (.sym div mach -imm-defn) (QI .b 0 op divop modop opmode R0 R0l R0h max-QI min-QI opc1 opc2 opc3 opc4 sem))
6764 (.apply (.sym div mach -imm-defn) (HI .w 1 op divop modop opmode R2R0 R0 R2 max-HI min-HI opc1 opc2 opc3 opc4 sem))
6765 )
6766)
6767(define-pmacro (div-imm op divop modop opmode max-QI min-QI max-HI min-HI opc16-1 opc16-2 opc16-3 opc16-4 opc32-1 opc32-2 opc32-3 opc32-4 sem)
6768 (begin
6769 (div-imm-mach 16 op divop modop opmode max-QI min-QI max-HI min-HI opc16-1 opc16-2 opc16-3 opc16-4 sem)
6770 (div-imm-mach 32 op divop modop opmode max-QI min-QI max-HI min-HI opc32-1 opc32-2 opc32-3 opc32-4 sem)
6771 )
6772)
6773
6774;<divop>.size src -- for m16c and m32c
6775(define-pmacro (div-src-defn mach wstr op src encoding divop modop opmode reg quot rem max min sem)
6776 (dni (.sym op mach wstr - src)
6777 (.str op mach wstr "-" src)
6778 ((machine mach))
6779 (.str op wstr " ${" src "}")
6780 encoding
6781 (sem divop modop opmode reg src quot rem max min)
6782 ())
6783)
6784(define-pmacro (div16-src-defn smode wstr wbit op divop modop opmode reg quot rem max min opc1 opc2 opc3 sem)
6785 (div-src-defn 16 wstr op (.sym dst16-16 - smode)
6786 (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16 - smode))
6787 divop modop opmode reg quot rem max min
6788 sem)
6789)
6790(define-pmacro (div32-src-defn smode wstr wbit op divop modop opmode reg quot rem max min opc1 opc2 opc3 sem)
6791 (begin
6792 ; Multi insns are tried for assembly in the reverse order in which they appear here, so
6793 ; define the absolute-indirect insns first in order to prevent them from being selected
6794 ; when the mode is register-indirect
6795; (div-src-defn 32 wstr op (.sym dst32-24-absolute-indirect- smode)
6796; (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-15-1 wbit) (f-18-2 opc2) (f-20-4 opc3) (.sym dst32-24-absolute-indirect - smode))
6797; divop modop opmode reg quot rem max min
6798; sem)
6799 (div-src-defn 32 wstr op (.sym dst32-16-Unprefixed- smode)
6800 (+ (f-0-4 opc1) (f-7-1 wbit) (f-10-2 opc2) (f-12-4 opc3) (.sym dst32-16-Unprefixed- smode))
6801 divop modop opmode reg quot rem max min
6802 sem)
6803; (div-src-defn 32 wstr op (.sym dst32-24-indirect- smode)
6804; (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-15-1 wbit) (f-18-2 opc2) (f-20-4 opc3) (.sym dst32-24-indirect - smode))
6805; divop modop opmode reg quot rem max min
6806; sem)
6807 )
6808)
6809(define-pmacro (div-src-mach mach op divop modop opmode max-QI min-QI max-HI min-HI opc1 opc2 opc3 sem)
6810 (begin
6811 (.apply (.sym div mach -src-defn) (QI .b 0 op divop modop opmode R0 R0l R0h max-QI min-QI opc1 opc2 opc3 sem))
6812 (.apply (.sym div mach -src-defn) (HI .w 1 op divop modop opmode R2R0 R0 R2 max-HI min-HI opc1 opc2 opc3 sem))
6813 )
6814)
6815(define-pmacro (div-src op divop modop opmode max-QI min-QI max-HI min-HI opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
6816 (begin
6817 (div-src-mach 16 op divop modop opmode max-QI min-QI max-HI min-HI opc16-1 opc16-2 opc16-3 sem)
6818 (div-src-mach 32 op divop modop opmode max-QI min-QI max-HI min-HI opc32-1 opc32-2 opc32-3 sem)
6819 )
6820)
6821
6822;=============================================================
6823; Bit manipulation
6824;
6825(define-pmacro (bit-insn-defn mach op suffix opnd encoding sem)
6826 (dni (.sym op mach - suffix - opnd)
6827 (.str op mach ":" suffix " " opnd)
6828 ((machine mach))
6829 (.str op "$" suffix " ${" opnd "}")
6830 encoding
6831 (sem opnd)
6832 ())
6833)
6834
6835(define-pmacro (bitsrc16-defn op opc1 opc2 opc3 sem)
6836 (bit-insn-defn 16 op X bit16-16
6837 (+ opc1 opc2 opc3 bit16-16)
6838 sem)
6839)
6840
6841(define-pmacro (bitsrc32-defn op opc1 opc2 opc3 sem)
6842 (begin
6843 (bit-insn-defn 32 op X bit32-24-Prefixed
6844 (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) bit32-24-Prefixed (f-15-1 opc2) (f-18-3 opc3))
6845 sem)
6846 )
6847)
6848
6849(define-pmacro (bitsrc-insn op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
6850 (begin
6851 (bitsrc16-defn op opc16-1 opc16-2 opc16-3 sem)
6852 (bitsrc32-defn op opc32-1 opc32-2 opc32-3 sem)
6853 )
6854)
6855
6856(define-pmacro (bitdst16-defn op opc1 opc2 opc3 opc4 opc5 opc6 sem)
6857 (begin
6858 (bit-insn-defn 16 op G bit16-16-basic (+ opc1 opc2 opc3 bit16-16-basic) sem)
6859 (bit-insn-defn 16 op G bit16-16-16 (+ opc1 opc2 opc3 bit16-16-16) sem)
6860 (bit-insn-defn 16 op S bit16-11-S (+ opc4 opc5 opc6 bit16-11-S) sem)
6861 (bit-insn-defn 16 op G bit16-16-8 (+ opc1 opc2 opc3 bit16-16-8) sem)
6862 )
6863)
6864
6865(define-pmacro (bitdst32-defn op opc1 opc2 opc3 sem)
6866 (begin
6867 (bit-insn-defn 32 op X bit32-16-Unprefixed
6868 (+ (f-0-4 opc1) bit32-16-Unprefixed (f-7-1 opc2) (f-10-3 opc3))
6869 sem)
6870 )
6871)
6872
6873(define-pmacro (bitdstnos-insn op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
6874 (begin
6875 (bitsrc16-defn op opc16-1 opc16-2 opc16-3 sem)
6876 (bitdst32-defn op opc32-1 opc32-2 opc32-3 sem)
6877 )
6878)
6879
6880(define-pmacro (bitdst-insn op opc16-1 opc16-2 opc16-3 opc16-4 opc16-5 opc16-6 opc32-1 opc32-2 opc32-3 sem)
6881 (begin
6882 (bitdst16-defn op opc16-1 opc16-2 opc16-3 opc16-4 opc16-5 opc16-6 sem)
6883 (bitdst32-defn op opc32-1 opc32-2 opc32-3 sem)
6884 )
6885)
6886
6887;=============================================================
6888; Bit condition
6889;
6890(define-pmacro (bitcond-insn-defn mach op bit-opnd cond-opnd encoding sem)
6891 (dni (.sym op mach - bit-opnd - cond-opnd)
6892 (.str op mach " " bit-opnd " " cond-opnd)
6893 ((machine mach))
6894 (.str op "${" cond-opnd "} ${" bit-opnd "}")
6895 encoding
6896 (sem mach bit-opnd cond-opnd)
6897 ())
6898)
6899
6900(define-pmacro (bitcond16-defn op opc1 opc2 opc3 sem)
6901 (begin
6902 (bitcond-insn-defn 16 op bit16-16-basic cond16-16 (+ opc1 opc2 opc3 bit16-16-basic cond16-16) sem)
6903 (bitcond-insn-defn 16 op bit16-16-16 cond16-32 (+ opc1 opc2 opc3 bit16-16-16 cond16-32) sem)
6904 (bitcond-insn-defn 16 op bit16-16-8 cond16-24 (+ opc1 opc2 opc3 bit16-16-8 cond16-24) sem)
6905 )
6906)
6907
6908(define-pmacro (bitcond32-defn op opc1 opc2 opc3 sem)
6909 (begin
6910 (bitcond-insn-defn 32 op bit32-16-24-Unprefixed cond32-40
6911 (+ (f-0-4 opc1) bit32-16-24-Unprefixed (f-7-1 opc2) (f-10-3 opc3) cond32-40)
6912 sem)
6913 (bitcond-insn-defn 32 op bit32-16-16-Unprefixed cond32-32
6914 (+ (f-0-4 opc1) bit32-16-16-Unprefixed (f-7-1 opc2) (f-10-3 opc3) cond32-32)
6915 sem)
6916 (bitcond-insn-defn 32 op bit32-16-8-Unprefixed cond32-24
6917 (+ (f-0-4 opc1) bit32-16-8-Unprefixed (f-7-1 opc2) (f-10-3 opc3) cond32-24)
6918 sem)
6919 (bitcond-insn-defn 32 op bit32-basic-Unprefixed cond32-16
6920 (+ (f-0-4 opc1) bit32-basic-Unprefixed (f-7-1 opc2) (f-10-3 opc3) cond32-16)
6921 sem)
6922 )
6923)
6924
6925(define-pmacro (bitcond-insn op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
6926 (begin
6927 (bitcond16-defn op opc16-1 opc16-2 opc16-3 sem)
6928 (bitcond32-defn op opc32-1 opc32-2 opc32-3 sem)
6929 )
6930)
6931
6932;=============================================================
6933;<insn>.size #imm1,#imm2,dst -- for m32c
6934;
6935(define-pmacro (insn-imm1-imm2-dst-defn src1 src2 dstgroup xmode wstr op encoding sem)
6936 (dni (.sym op 32 wstr - src1 - src2 - dstgroup)
6937 (.str op 32 wstr "-" src1 "-" src2 "-" dstgroup "-" xmode)
6938 ((machine 32))
6939 (.str op wstr " #${" src1 "},#${" src2 "},${dst32-" dstgroup "-" xmode "}")
6940 encoding
6941 (sem xmode src1 src2 (.sym dst32- dstgroup - xmode))
6942 ())
6943)
6944
6945; m32c Prefixed variants
6946(define-pmacro (insn32-imm1-imm2-dst-Prefixed-defn xmode wstr wbit base1 base2 base3 base4 op opc1 opc2 opc3 sem)
6947 (begin
6948 (insn-imm1-imm2-dst-defn (.sym Imm-48- xmode) (.sym Imm- base4 - xmode) 24-24-Prefixed xmode wstr op
6949 (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3)
6950 (.sym dst32-24-24-Prefixed- xmode) (.sym Imm-48- xmode) (.sym Imm- base4 - xmode))
6951 sem)
6952 (insn-imm1-imm2-dst-defn (.sym Imm-40- xmode) (.sym Imm- base3 - xmode) 24-16-Prefixed xmode wstr op
6953 (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3)
6954 (.sym dst32-24-16-Prefixed- xmode) (.sym Imm-40- xmode) (.sym Imm- base3 - xmode))
6955 sem)
6956 (insn-imm1-imm2-dst-defn (.sym Imm-32- xmode) (.sym Imm- base2 - xmode) 24-8-Prefixed xmode wstr op
6957 (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3)
6958 (.sym dst32-24-8-Prefixed- xmode) (.sym Imm-32- xmode) (.sym Imm- base2 - xmode))
6959 sem)
6960 (insn-imm1-imm2-dst-defn (.sym Imm-24- xmode) (.sym Imm- base1 - xmode) basic-Prefixed xmode wstr op
6961 (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3)
6962 (.sym dst32-basic-Prefixed- xmode) (.sym Imm-24- xmode) (.sym Imm- base1 - xmode))
6963 sem)
6964 )
6965)
6966
6967; m32c Unprefixed variants
6968(define-pmacro (insn32-imm1-imm2-dst-Unprefixed-defn xmode wstr wbit base1 base2 base3 base4 op opc1 opc2 opc3 sem)
6969 (begin
6970 (insn-imm1-imm2-dst-defn (.sym Imm-40- xmode) (.sym Imm- base4 - xmode) 16-24-Unprefixed xmode wstr op
6971 (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3)
6972 (.sym dst32-16-24-Unprefixed- xmode) (.sym Imm-40- xmode) (.sym Imm- base4 - xmode))
6973 sem)
6974 (insn-imm1-imm2-dst-defn (.sym Imm-32- xmode) (.sym Imm- base3 - xmode) 16-16-Unprefixed xmode wstr op
6975 (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3)
6976 (.sym dst32-16-16-Unprefixed- xmode) (.sym Imm-32- xmode) (.sym Imm- base3 - xmode))
6977 sem)
6978 (insn-imm1-imm2-dst-defn (.sym Imm-24- xmode) (.sym Imm- base2 - xmode) 16-8-Unprefixed xmode wstr op
6979 (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3)
6980 (.sym dst32-16-8-Unprefixed- xmode) (.sym Imm-24- xmode) (.sym Imm- base2 - xmode))
6981 sem)
6982 (insn-imm1-imm2-dst-defn (.sym Imm-16- xmode) (.sym Imm- base1 - xmode) basic-Unprefixed xmode wstr op
6983 (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3)
6984 (.sym dst32-basic-Unprefixed- xmode) (.sym Imm-16- xmode) (.sym Imm- base1 - xmode))
6985 sem)
6986 )
6987)
6988
6989(define-pmacro (insn-imm1-imm2-dst-Prefixed op opc32-1 opc32-2 opc32-3 sem)
6990 (begin
6991 (insn32-imm1-imm2-dst-Prefixed-defn QI .b 0 32 40 48 56 op opc32-1 opc32-2 opc32-3 sem)
6992 (insn32-imm1-imm2-dst-Prefixed-defn HI .w 1 40 48 56 64 op opc32-1 opc32-2 opc32-3 sem)
6993 )
6994)
6995(define-pmacro (insn-imm1-imm2-dst-Unprefixed op opc32-1 opc32-2 opc32-3 sem)
6996 (begin
6997 (insn32-imm1-imm2-dst-Unprefixed-defn QI .b 0 24 32 40 48 op opc32-1 opc32-2 opc32-3 sem)
6998 (insn32-imm1-imm2-dst-Unprefixed-defn HI .w 1 32 40 48 56 op opc32-1 opc32-2 opc32-3 sem)
6999 )
7000)
7001\f
7002;=============================================================
7003; Insn definitions
7004;-------------------------------------------------------------
7005; abs - absolute
7006;-------------------------------------------------------------
7007
7008(define-pmacro (abs-sem mode dst)
7009 (sequence ((mode result))
7010 (set result (abs mode dst))
7011 (set obit (eq result dst))
7012 (set-z-and-s result)
7013 (set dst result))
7014)
7015(unary-insn abs (f-0-4 7) (f-4-3 3) (f-8-4 #xF) #xA #x1 #xF abs-sem)
7016
7017;-------------------------------------------------------------
7018; adcf - addition carry flag
7019;-------------------------------------------------------------
7020
7021(define-pmacro (adcf-sem mode dst)
7022 (sequence ((mode result))
7023 (set result (addc mode dst 0 cbit))
7024 (set obit (add-oflag mode dst 0 cbit))
7025 (set cbit (add-cflag mode dst 0 cbit))
7026 (set-z-and-s result)
7027 (set dst result))
7028)
7029(unary-insn adcf (f-0-4 7) (f-4-3 3) (f-8-4 #xE) #xB #x1 #xE adcf-sem)
7030
7031;-------------------------------------------------------------
7032; add - binary addition
7033;-------------------------------------------------------------
7034
7035(define-pmacro (add-sem mode src1 dst)
7036 (sequence ((mode result))
7037 (set result (add mode src1 dst))
7038 (set obit (add-oflag mode src1 dst 0))
7039 (set cbit (add-cflag mode src1 dst 0))
7040 (set-z-and-s result)
7041 (set dst result))
7042)
7043
7044; add.L:G #imm32,dst (m32 #2)
7045(binary-arith32-imm-dst-defn SI SI .l 0 add G #x8 #x3 #x1 add-sem)
7046; add.size:G #imm,dst (m16 #1 m32 #1)
7047(binary-arith-imm-dst add G (f-0-4 7) (f-4-3 3) (f-8-4 4) #x8 #x2 #xE add-sem)
7048; add.size:Q #imm4,dst (m16 #2 m32 #3)
7049(binary-arith-imm4-dst add (f-0-4 #xC) (f-4-3 4) #x7 #x3 add-sem)
7050(binary-arith32-imm4-dst-defn SI .l 1 0 add #x7 #x3 add-sem)
7051; add.b:S #imm8,dst3 (m16 #3)
7052(binary-arith16-b-S-imm8-dst3 add ".b" (f-0-4 8) (f-4-1 0) add-sem)
7053; add.BW:Q #imm4,sp (m16 #7)
7054(binary-arith16-Q-sp add (f-0-4 7) (f-4-4 #xD) (f-8-4 #xB) add-sem)
7055; add.BW:G #imm,sp (m16 #6)
7056(binary-arith16-G-sp add (f-0-4 7) (f-4-3 6) (f-8-4 #xE) (f-12-4 #xB) add-sem)
7057; add.BW:G src,dst (m16 #4 m32 #6)
7058(binary-arith-src-dst add G (f-0-4 #xA) (f-4-3 0) #x1 #x8 add-sem)
7059; add.B.S src2,r0l/r0h (m16 #5)
7060(binary-arith16-b-S-src2 add (f-0-4 2) (f-4-1 0) add-sem)
7061; add.L:G src,dst (m32 #7)
7062(binary-arith32-src-dst-defn SI SI .l 1 add G #x1 #x2 add-sem)
7063; add.L:S #imm{1,2},A0/A1 (m32 #5)
7064(binary-arith32-l-s-imm1-an add (f-0-2 2) (f-3-4 6) add-sem)
7065; add.L:Q #imm3,sp (m32 #9)
7066(binary-arith32-l-q-imm3-sp add (f-0-2 1) (f-4-3 1) add-sem)
7067; add.L:S #imm8,sp (m32 #10)
7068(binary-arith32-l-s-imm8-sp add (f-0-4 #xb) (f-4-4 6) (f-8-4 0) (f-12-4 3) add-sem)
7069; add.L:G #imm16,sp (m32 #8)
7070(binary-arith32-l-g-imm16-sp add (f-0-4 #xb) (f-4-4 6) (f-8-4 1) (f-12-4 3) add-sem)
7071; add.BW:S #imm,dst2 (m32 #4)
7072(binary-arith32-s-imm-dst QI .b 0 add #x0 #x3 add-sem)
7073(binary-arith32-s-imm-dst HI .w 1 add #x0 #x3 add-sem)
7074
7075;-------------------------------------------------------------
7076; adc - binary add with carry
7077;-------------------------------------------------------------
7078
7079(define-pmacro (addc-sem mode src dst)
7080 (sequence ((mode result))
7081 (set result (addc mode src dst cbit))
7082 (set obit (add-oflag mode src dst cbit))
7083 (set cbit (add-cflag mode src dst cbit))
7084 (set-z-and-s result)
7085 (set dst result))
7086)
7087
7088; adc.size:G #imm,dst
7089(binary-arith16-imm-dst-defn QI QI .b 0 adc X (f-0-4 7) (f-4-3 3) (f-8-4 6) addc-sem)
7090(binary-arith16-imm-dst-defn HI HI .w 1 adc X (f-0-4 7) (f-4-3 3) (f-8-4 6) addc-sem)
7091(binary-arith32-imm-dst-Prefixed QI QI .b 0 adc X #x8 #x2 #xE addc-sem)
7092(binary-arith32-imm-dst-Prefixed HI HI .w 1 adc X #x8 #x2 #xE addc-sem)
7093
7094; adc.BW:G src,dst
7095(binary-arith16-src-dst-defn QI QI .b 0 adc X (f-0-4 #xB) (f-4-3 0) addc-sem)
7096(binary-arith16-src-dst-defn HI HI .w 1 adc X (f-0-4 #xB) (f-4-3 0) addc-sem)
7097(binary-arith32-src-dst-Prefixed QI QI .b 0 adc X #x1 #x4 addc-sem)
7098(binary-arith32-src-dst-Prefixed HI HI .w 1 adc X #x1 #x4 addc-sem)
7099
7100;-------------------------------------------------------------
7101; dadc - decimal add with carry
7102; dadd - decimal addition
7103;-------------------------------------------------------------
7104
7105(define-pmacro (dadc-sem mode src dst)
7106 (sequence ((mode result))
7107 (set result (subc mode dst src (not cbit)))
7108 (set cbit (sub-cflag mode dst src (not cbit)))
7109 (set-z-and-s result)
7110 (set dst result))
7111)
7112
7113(define-pmacro (decimal-subtraction16-insn op opc1 opc2)
7114 (begin
7115 ; op.b #imm8,r0l
7116 (dni (.sym op 16.b-imm8)
7117 (.str op ".b #imm8")
7118 ((machine 16))
7119 (.str op ".b #${Imm-16-QI}")
7120 (+ (f-0-4 #x7) (f-4-4 #xC) (f-8-4 #xE) (f-12-4 opc1) Imm-16-QI)
7121 ((.sym op -sem) QI Imm-16-QI R0l)
7122 ())
7123 ; op.w #imm16,r0
7124 (dni (.sym op 16.w-imm16)
7125 (.str op ".b #imm16")
7126 ((machine 16))
7127 (.str op ".w #${Imm-16-HI}")
7128 (+ (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #xE) (f-12-4 opc1) Imm-16-HI)
7129 ((.sym op -sem) HI Imm-16-HI R0)
7130 ())
7131 ; op.b #r0h,r0l
7132 (dni (.sym op 16.b-r0h-r0l)
7133 (.str op ".b r0h,r0l")
7134 ((machine 16))
7135 (.str op ".b r0h,r0l")
7136 (+ (f-0-4 #x7) (f-4-4 #xC) (f-8-4 #xE) (f-12-4 opc2))
7137 ((.sym op -sem) QI R0h R0l)
7138 ())
7139 ; op.w #r1,r0
7140 (dni (.sym op 16.w-r1-r0)
7141 (.str op ".b r1,r0")
7142 ((machine 16))
7143 (.str op ".w r1,r0")
7144 (+ (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #xE) (f-12-4 opc2))
7145 ((.sym op -sem) HI R1 R0)
7146 ())
7147 )
7148)
7149
7150; dadc for m16c
7151(decimal-subtraction16-insn dadc #xE #x6 )
7152
7153; dadc.size #imm,dst
7154(binary-arith32-imm-dst-Prefixed QI QI .b 0 dadc X #x8 #x0 #xE dadc-sem)
7155(binary-arith32-imm-dst-Prefixed HI HI .w 1 dadc X #x8 #x0 #xE dadc-sem)
7156; dadc.BW src,dst
7157(binary-arith32-src-dst-Prefixed QI QI .b 0 dadc X #x1 #x8 dadc-sem)
7158(binary-arith32-src-dst-Prefixed HI HI .w 1 dadc X #x1 #x8 dadc-sem)
7159
7160(define-pmacro (dadd-sem mode src dst)
7161 (sequence ((mode result))
7162 (set result (subc mode dst src 0))
7163 (set cbit (sub-cflag mode dst src 0))
7164 (set-z-and-s result)
7165 (set dst result))
7166)
7167
7168; dadd for m16c
7169(decimal-subtraction16-insn dadd #xC #x4)
7170
7171; dadd.size #imm,dst
7172(binary-arith32-imm-dst-Prefixed QI QI .b 0 dadd X #x8 #x1 #xE dadd-sem)
7173(binary-arith32-imm-dst-Prefixed HI HI .w 1 dadd X #x8 #x1 #xE dadd-sem)
7174; dadd.BW src,dst
7175(binary-arith32-src-dst-Prefixed QI QI .b 0 dadd X #x1 #x0 dadd-sem)
7176(binary-arith32-src-dst-Prefixed HI HI .w 1 dadd X #x1 #x0 dadd-sem)
7177
7178;-------------------------------------------------------------;
7179; addx - Add extend sign with no carry
7180;-------------------------------------------------------------;
7181
7182(define-pmacro (addx-sem mode src dst)
7183 (sequence ((SI source) (SI result))
7184 (set source (zext SI (trunc QI src)))
7185 (set result (add SI source dst))
7186 (set obit (add-oflag SI source dst 0))
7187 (set cbit (add-cflag SI source dst 0))
7188 (set-z-and-s result)
7189 (set dst result))
7190)
7191
7192; addx #imm,dst
7193(binary-arith32-imm-dst-defn QI SI "" 0 addx X #x8 #x1 #x1 addx-sem)
7194; addx src,dst
7195(binary-arith32-src-dst-defn QI SI "" 0 addx X #x1 #x2 addx-sem)
7196
7197;-------------------------------------------------------------
7198; adjnz - Add/Sub and branch if not zero
7199;-------------------------------------------------------------
7200
7201(define-pmacro (arith-jnz-sem mode src dst label)
7202 (sequence ((mode result))
7203 (set result (add mode src dst))
7204 (set dst result)
7205 (if (ne result 0)
7206 (set pc label)))
7207)
7208
7209; adjnz.size #imm4,dst,label
7210(arith-jnz-imm4-dst adjnz (f-0-4 #xF) (f-4-3 4) #xf #x1 arith-jnz-sem)
7211
7212;-------------------------------------------------------------
7213; and - binary and
7214;-------------------------------------------------------------
7215
7216(define-pmacro (and-sem mode src1 dst)
7217 (sequence ((mode result))
7218 (set result (and mode src1 dst))
7219 (set-z-and-s result)
7220 (set dst result))
7221)
7222
7223; and.size:G #imm,dst (m16 #1 m32 #1)
7224(binary-arith-imm-dst and G (f-0-4 7) (f-4-3 3) (f-8-4 2) #x8 #x3 #xF and-sem)
7225; and.b:S #imm8,dst3 (m16 #2)
7226(binary-arith16-b-S-imm8-dst3 and ".b" (f-0-4 9) (f-4-1 0) and-sem)
7227; and.BW:G src,dst (m16 #3 m32 #3)
7228(binary-arith-src-dst and G (f-0-4 #x9) (f-4-3 0) #x1 #xD and-sem)
7229; and.B.S src2,r0l/r0h (m16 #4)
7230(binary-arith16-b-S-src2 and (f-0-4 1) (f-4-1 0) and-sem)
7231; and.BW:S #imm,dst2 (m32 #2)
7232(binary-arith32-s-imm-dst QI .b 0 and #x1 #x6 and-sem)
7233(binary-arith32-s-imm-dst HI .w 1 and #x1 #x6 and-sem)
7234
7235;-------------------------------------------------------------
7236; band - bit and
7237;-------------------------------------------------------------
7238
7239(define-pmacro (band-sem src)
7240 (set cbit (and src cbit))
7241)
7242(bitsrc-insn band (f-0-4 7) (f-4-4 #xE) (f-8-4 4) #xD #x0 #x1 band-sem)
7243
7244;-------------------------------------------------------------
7245; bclr - bit clear
7246;-------------------------------------------------------------
7247
7248(define-pmacro (bclr-sem dst)
7249 (set dst 0)
7250)
7251(bitdst-insn bclr (f-0-4 7) (f-4-4 #xE) (f-8-4 8) (f-0-2 1) (f-2-2 0) (f-4-1 0) #xD #x0 #x6 bclr-sem)
7252
7253;-------------------------------------------------------------
7254; bitindex - bit index
7255;-------------------------------------------------------------
7256
7257(define-pmacro (bitindex-sem mode dst)
7258 (set BitIndex dst)
7259)
7260(unary-insn-defn 32 16-Unprefixed QI .b bitindex
7261 (+ (f-0-4 #xC) (f-7-1 0) dst32-16-Unprefixed-QI (f-10-2 #x2) (f-12-4 #xE))
7262 bitindex-sem)
7263(unary-insn-defn 32 16-Unprefixed HI .w bitindex
7264 (+ (f-0-4 #xC) (f-7-1 1) dst32-16-Unprefixed-HI (f-10-2 #x2) (f-12-4 #xE))
7265 bitindex-sem)
7266
7267;-------------------------------------------------------------
7268; bmCnd - bit move condition
7269;-------------------------------------------------------------
7270
7271(define-pmacro (test-condition16 cond)
7272 (case UQI cond
7273 ((#x00) (trunc BI cbit))
7274 ((#x01) (not (or cbit zbit)))
7275 ((#x02) (trunc BI zbit))
7276 ((#x03) (trunc BI sbit))
7277 ((#x04) (or zbit (xor sbit obit)))
7278 ((#x05) (trunc BI obit))
7279 ((#x06) (xor sbit obit))
7280 ((#xf8) (not cbit))
7281 ((#xf9) (or cbit zbit))
7282 ((#xfa) (not zbit))
7283 ((#xfb) (not sbit))
7284 ((#xfc) (not (or zbit (xor sbit obit))))
7285 ((#xfd) (not obit))
7286 ((#xfe) (not (xor sbit obit)))
7287 (else (const BI 0))
7288 )
7289)
7290
7291(define-pmacro (test-condition32 cond)
7292 (case UQI cond
7293 ((#x00) (not cbit))
7294 ((#x01) (or cbit zbit))
7295 ((#x02) (not zbit))
7296 ((#x03) (not sbit))
7297 ((#x04) (not obit))
7298 ((#x05) (not (or zbit (xor sbit obit))))
7299 ((#x06) (not (xor sbit obit)))
7300 ((#x08) (trunc BI cbit))
7301 ((#x09) (not (or cbit zbit)))
7302 ((#x0a) (trunc BI zbit))
7303 ((#x0b) (trunc BI sbit))
7304 ((#x0c) (trunc BI obit))
7305 ((#x0d) (or zbit (xor sbit obit)))
7306 ((#x0e) (xor sbit obit))
7307 (else (const BI 0))
7308 )
7309)
7310
7311(define-pmacro (bitcond-sem mach op cond)
7312 (if ((.sym test-condition mach) cond)
7313 (set op 1)
7314 (set op 0))
7315)
7316(bitcond-insn bm (f-0-4 7) (f-4-4 #xE) (f-8-4 2) #xD #x0 #x2 bitcond-sem)
7317
7318(dni bm16-c
7319 "bm16 C"
7320 ((machine 16))
7321 "bm$cond16c c"
7322 (+ (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #xD) cond16c)
7323 (bitcond-sem 16 cbit cond16c)
7324 ())
7325
7326(dni bm32-c
7327 "bm32 C"
7328 ((machine 32))
7329 "bm$cond32 c"
7330 (+ (f-0-4 #xD) (f-4-4 #x9) (f-8-1 0) (f-10-3 5) cond32)
7331 (bitcond-sem 32 cbit cond32)
7332 ())
7333
7334;-------------------------------------------------------------
7335; bnand
7336;-------------------------------------------------------------
7337
7338(define-pmacro (bnand-sem src)
7339 (set cbit (and (inv src) cbit))
7340)
7341(bitsrc-insn bnand (f-0-4 7) (f-4-4 #xE) (f-8-4 5) #xD #x0 #x3 bnand-sem)
7342
7343;-------------------------------------------------------------
7344; bnor
7345;-------------------------------------------------------------
7346
7347(define-pmacro (bnor-sem src)
7348 (set cbit (or (inv src) cbit))
7349)
7350(bitsrc-insn bnor (f-0-4 7) (f-4-4 #xE) (f-8-4 7) #xD #x0 #x6 bnor-sem)
7351
7352;-------------------------------------------------------------
7353; bnot
7354;-------------------------------------------------------------
7355
7356(define-pmacro (bnot-sem dst)
7357 (set dst (inv dst))
7358)
7359(bitdst-insn bnot (f-0-4 7) (f-4-4 #xE) (f-8-4 #xA) (f-0-2 1) (f-2-2 1) (f-4-1 0) #xD #x0 #x3 bnot-sem)
7360
7361;-------------------------------------------------------------
7362; bntst
7363;-------------------------------------------------------------
7364
7365(define-pmacro (bntst-sem src)
7366 (set cbit (inv src))
7367 (set zbit (inv src))
7368)
7369(bitsrc-insn bntst (f-0-4 7) (f-4-4 #xE) (f-8-4 3) #xD #x0 #x0 bntst-sem)
7370
7371;-------------------------------------------------------------
7372; bnxor
7373;-------------------------------------------------------------
7374
7375(define-pmacro (bnxor-sem src)
7376 (set cbit (xor (inv src) cbit))
7377)
7378(bitsrc-insn bnxor (f-0-4 7) (f-4-4 #xE) (f-8-4 #xD) #xD #x0 #x7 bnxor-sem)
7379
7380;-------------------------------------------------------------
7381; bor
7382;-------------------------------------------------------------
7383
7384(define-pmacro (bor-sem src)
7385 (set cbit (or src cbit))
7386)
7387(bitsrc-insn bor (f-0-4 7) (f-4-4 #xE) (f-8-4 #x6) #xD #x0 #x4 bor-sem)
7388
7389;-------------------------------------------------------------
7390; brk
7391;-------------------------------------------------------------
7392
7393(dni brk16
7394 "brk"
7395 ((machine 16))
7396 "brk"
7397 (+ (f-0-4 #x0) (f-4-4 #x0))
7398 (nop)
7399 ())
7400
7401(dni brk32
7402 "brk"
7403 ((machine 32))
7404 "brk"
7405 (+ (f-0-4 #x0) (f-4-4 #x0))
7406 (nop)
7407 ())
7408
7409;-------------------------------------------------------------
7410; brk2
7411;-------------------------------------------------------------
7412
7413(dni brk232
7414 "brk2"
7415 ((machine 32))
7416 "brk2"
7417 (+ (f-0-4 #x0) (f-4-4 #x8))
7418 (nop)
7419 ())
7420
7421;-------------------------------------------------------------
7422; bset
7423;-------------------------------------------------------------
7424
7425(define-pmacro (bset-sem dst)
7426 (set dst 1)
7427)
7428(bitdst-insn bset (f-0-4 7) (f-4-4 #xE) (f-8-4 9) (f-0-2 1) (f-2-2 0) (f-4-1 1) #xD #x0 #x7 bset-sem)
7429
7430;-------------------------------------------------------------
7431; btst
7432;-------------------------------------------------------------
7433
7434(define-pmacro (btst-sem dst)
7435 (set zbit (inv dst))
7436 (set cbit dst)
7437)
7438(bitdst-insn btst (f-0-4 7) (f-4-4 #xE) (f-8-4 #xB) (f-0-2 1) (f-2-2 1) (f-4-1 1) #xD #x0 #x0 btst-sem)
7439
7440;-------------------------------------------------------------
7441; btstc
7442;-------------------------------------------------------------
7443
7444(define-pmacro (btstc-sem dst)
7445 (set zbit (inv dst))
7446 (set cbit dst)
7447 (set dst (const 0))
7448)
7449(bitdstnos-insn btstc (f-0-4 7) (f-4-4 #xE) (f-8-4 #x0) #xD #x0 #x4 btstc-sem)
7450
7451;-------------------------------------------------------------
7452; btsts
7453;-------------------------------------------------------------
7454
7455(define-pmacro (btsts-sem dst)
7456 (set zbit (inv dst))
7457 (set cbit dst)
7458 (set dst (const 0))
7459)
7460(bitdstnos-insn btsts (f-0-4 7) (f-4-4 #xE) (f-8-4 #x1) #xD #x0 #x5 btsts-sem)
7461
7462;-------------------------------------------------------------
7463; bxor
7464;-------------------------------------------------------------
7465
7466(define-pmacro (bxor-sem src)
7467 (set cbit (xor src cbit))
7468)
7469(bitsrc-insn bxor (f-0-4 7) (f-4-4 #xE) (f-8-4 #xC) #xD #x0 #x5 bxor-sem)
7470
7471;-------------------------------------------------------------
7472; clip
7473;-------------------------------------------------------------
7474
7475(define-pmacro (clip-sem mode imm1 imm2 dest)
7476 (sequence ()
7477 (if (gt mode imm1 dest)
7478 (set dest imm1))
7479 (if (lt mode imm2 dest)
7480 (set dest imm2)))
7481)
7482
7483(insn-imm1-imm2-dst-Prefixed clip #x8 #x3 #xE clip-sem)
7484
7485;-------------------------------------------------------------
7486; cmp - binary compare
7487;-------------------------------------------------------------
7488
7489(define-pmacro (cmp-sem mode src1 dst)
7490 (sequence ((mode result))
7491 (set result (sub mode dst src1))
7492 (set obit (sub-oflag mode dst src1 0))
7493 (set cbit (not (sub-cflag mode dst src1 0)))
7494 (set-z-and-s result))
7495)
7496
7497; cmp.L:G #imm32,dst (m32 #2)
7498(binary-arith32-imm-dst-defn SI SI .l 0 cmp G #xA #x3 #x1 cmp-sem)
7499; cmp.size:G #imm,dst (m16 #1 m32 #1)
7500(binary-arith-imm-dst cmp G (f-0-4 7) (f-4-3 3) (f-8-4 8) #x9 #x2 #xE cmp-sem)
7501; cmp.size:Q #imm4,dst (m16 #2 m32 #3)
7502(binary-arith-imm4-dst cmp (f-0-4 #xD) (f-4-3 0) #x7 #x1 cmp-sem)
7503; cmp.b:S #imm8,dst3 (m16 #3)
7504(binary-arith16-b-S-imm8-dst3 cmp ".b" (f-0-4 #xE) (f-4-1 0) cmp-sem)
7505; cmp.BW:G src,dst (m16 #4 m32 #5)
7506(binary-arith-src-dst cmp G (f-0-4 #xC) (f-4-3 0) #x1 #x6 cmp-sem)
7507; cmp.B.S src2,r0l/r0h (m16 #5)
7508(binary-arith16-b-S-src2 cmp (f-0-4 3) (f-4-1 1) cmp-sem)
7509; cmp.L:G src,dst (m32 #6)
7510(binary-arith32-src-dst-defn SI SI .l 1 cmp G #x1 #x1 cmp-sem)
7511; cmp.BW:S #imm,dst2 (m32 #4)
7512(binary-arith32-s-imm-dst QI .b 0 cmp #x1 #x3 cmp-sem)
7513(binary-arith32-s-imm-dst HI .w 1 cmp #x1 #x3 cmp-sem)
7514; cmp.BW:s src2,r0[l] (m32 #7)
7515(binary-arith32-S-src2 cmp QI .b 0 (f-0-2 1) (f-4-3 0) cmp-sem)
7516(binary-arith32-S-src2 cmp HI .w 1 (f-0-2 1) (f-4-3 0) cmp-sem)
7517
7518;-------------------------------------------------------------
7519; cmpx - binary compare extend sign
7520;-------------------------------------------------------------
7521
7522(define-pmacro (cmpx-sem mode src1 dst)
7523 (sequence ((mode result))
7524 (set result (sub mode dst (ext mode src1)))
7525 (set obit (sub-oflag mode dst (ext mode src1) 0))
7526 (set cbit (sub-cflag mode dst (ext mode src1) 0))
7527 (set-z-and-s result))
7528)
7529
7530(binary-arith32-imm-dst-defn QI SI "" 0 cmpx X #xA #x1 #x1 cmpx-sem)
7531
7532;-------------------------------------------------------------
7533; dec - decrement
7534;-------------------------------------------------------------
7535
7536(define-pmacro (dec-sem mode dest)
7537 (sequence ((mode result))
7538 (set result (sub mode dest 1))
7539 (set-z-and-s result)
7540 (set dest result))
7541)
7542
7543(dni dec16.b
7544 "dec.b Dst16-3-S-8"
7545 ((machine 16))
7546 "dec.b ${Dst16-3-S-8}"
7547 (+ (f-0-4 #xA) (f-4-1 #x1) Dst16-3-S-8)
7548 (dec-sem QI Dst16-3-S-8)
7549 ())
7550
7551(dni dec16.w
7552 "dec.w Dst16An-S"
7553 ((machine 16))
7554 "dec.w ${Dst16An-S}"
7555 (+ (f-0-4 #xF) (f-5-3 #x2) Dst16An-S)
7556 (dec-sem HI Dst16An-S)
7557 ())
7558
7559(unary32-defn QI .b 0 dec #xB #x0 #xE dec-sem)
7560(unary32-defn HI .w 1 dec #xB #x0 #xE dec-sem)
7561
7562;-------------------------------------------------------------
7563; div - divide
7564; divu - divide unsigned
7565; divx - divide extension
7566;-------------------------------------------------------------
7567
7568; div.BW #imm
7569(div-imm div div mod SI 127 -128 32767 -32768 (f-0-4 #x7) (f-4-3 6) (f-8-4 #xE) (f-12-4 #x1) #xB #x0 #x2 #x3 div-sem)
7570(div-imm divu udiv umod USI 255 0 65535 0 (f-0-4 #x7) (f-4-3 6) (f-8-4 #xE) (f-12-4 #x0) #xB #x0 #x0 #x3 div-sem)
7571(div-imm divx div mod SI 127 -128 32767 -32768 (f-0-4 #x7) (f-4-3 6) (f-8-4 #xE) (f-12-4 #x3) #xB #x2 #x2 #x3 div-sem)
7572; div.BW src
7573(div-src div div mod SI 127 -128 32767 -32768 (f-0-4 #x7) (f-4-3 3) (f-8-4 #xD) #x8 #x1 #xE div-sem)
7574(div-src divu udiv umod USI 255 0 65535 0 (f-0-4 #x7) (f-4-3 3) (f-8-4 #xC) #x8 #x0 #xE div-sem)
7575(div-src divx div mod SI 127 -128 32767 -32768 (f-0-4 #x7) (f-4-3 3) (f-8-4 #x9) #x9 #x1 #xE div-sem)
7576
7577(div-src-defn 32 .l div dst32-24-Prefixed-SI
7578 (+ (f-0-4 0) (f-4-4 1) (f-8-4 #xA) (f-15-1 1) (f-18-2 #x1) (f-20-4 #xf) dst32-24-Prefixed-SI)
7579 div mod SI R2R0 R2R0 NoRemainder #x7fffffff (neg SI #x80000000)
7580 div-sem)
7581(div-src-defn 32 .l divu dst32-24-Prefixed-SI
7582 (+ (f-0-4 0) (f-4-4 1) (f-8-4 #xA) (f-15-1 1) (f-18-2 #x0) (f-20-4 #xf) dst32-24-Prefixed-SI)
7583 udiv umod USI R2R0 R2R0 NoRemainder #x80000000 0
7584 div-sem)
7585(div-src-defn 32 .l divx dst32-24-Prefixed-SI
7586 (+ (f-0-4 0) (f-4-4 1) (f-8-4 #xA) (f-15-1 1) (f-18-2 #x2) (f-20-4 #xf) dst32-24-Prefixed-SI)
7587 div mod SI R2R0 R2R0 NoRemainder #x7fffffff (neg SI #x80000000)
7588 div-sem)
7589
7590;-------------------------------------------------------------
7591; dsbb - decimal subtraction with borrow
7592; dsub - decimal subtraction
7593;-------------------------------------------------------------
7594
7595(define-pmacro (dsbb-sem mode src dst)
7596 (sequence ((mode result))
7597 (set result (subc mode dst src (not cbit)))
7598 (set cbit (sub-cflag mode dst src (not cbit)))
7599 (set-z-and-s result)
7600 (set dst result))
7601)
7602
7603; dsbb for m16c
7604(decimal-subtraction16-insn dsbb #xF #x7)
7605
7606; dsbb.size #imm,dst
7607(binary-arith32-imm-dst-Prefixed QI QI .b 0 dsbb X #x9 #x0 #xE dsbb-sem)
7608(binary-arith32-imm-dst-Prefixed HI HI .w 1 dsbb X #x9 #x0 #xE dsbb-sem)
7609; dsbb.BW src,dst
7610(binary-arith32-src-dst-Prefixed QI QI .b 0 dsbb X #x1 #xA dsbb-sem)
7611(binary-arith32-src-dst-Prefixed HI HI .w 1 dsbb X #x1 #xA dsbb-sem)
7612
7613(define-pmacro (dsub-sem mode src dst)
7614 (sequence ((mode result))
7615 (set result (subc mode dst src 0))
7616 (set cbit (sub-cflag mode dst src 0))
7617 (set-z-and-s result)
7618 (set dst result))
7619)
7620
7621; dsub for m16c
7622(decimal-subtraction16-insn dsub #xD #x5)
7623
7624; dsub.size #imm,dst
7625(binary-arith32-imm-dst-Prefixed QI QI .b 0 dsub X #x9 #x1 #xE dsub-sem)
7626(binary-arith32-imm-dst-Prefixed HI HI .w 1 dsub X #x9 #x1 #xE dsub-sem)
7627; dsub.BW src,dst
7628(binary-arith32-src-dst-Prefixed QI QI .b 0 dsub X #x1 #x2 dsub-sem)
7629(binary-arith32-src-dst-Prefixed HI HI .w 1 dsub X #x1 #x2 dsub-sem)
7630
7631;-------------------------------------------------------------
7632; sub - binary subtraction
7633;-------------------------------------------------------------
7634
7635(define-pmacro (sub-sem mode src1 dst)
7636 (sequence ((mode result))
7637 (set result (sub mode dst src1))
7638 (set obit (sub-oflag mode dst src1 0))
7639 (set cbit (sub-cflag mode dst src1 0))
7640 (set dst result)
7641 (set-z-and-s result)))
7642
7643; sub.size:G #imm,dst (m16 #1 m32 #1)
7644(binary-arith-imm-dst sub G (f-0-4 7) (f-4-3 3) (f-8-4 5) #x8 #x3 #xE sub-sem)
7645; sub.b:S #imm8,dst3 (m16 #2)
7646(binary-arith16-b-S-imm8-dst3 sub ".b" (f-0-4 8) (f-4-1 1) sub-sem)
7647; sub.BW:G src,dst (m16 #3 m32 #4)
7648(binary-arith-src-dst sub G (f-0-4 #xA) (f-4-3 4) #x1 #xA sub-sem)
7649; sub.B.S src2,r0l/r0h (m16 #4)
7650(binary-arith16-b-S-src2 sub (f-0-4 2) (f-4-1 1) sub-sem)
7651; sub.L:G #imm32,dst (m32 #2)
7652(binary-arith32-imm-dst-defn SI SI .l 0 sub G #x9 #x3 #x1 sub-sem)
7653; sub.BW:S #imm,dst2 (m32 #3)
7654(binary-arith32-s-imm-dst QI .b 0 sub #x0 #x7 sub-sem)
7655(binary-arith32-s-imm-dst HI .w 1 sub #x0 #x7 sub-sem)
7656; sub.L:G src,dst (m32 #5)
7657(binary-arith32-src-dst-defn SI SI .l 1 sub G #x1 #x0 sub-sem)
7658
7659;-------------------------------------------------------------
7660; enter - enter function
7661; exitd - exit and deallocate stack frame
7662;-------------------------------------------------------------
7663
7664(define-pmacro (enter16-sem mach amt)
7665 (sequence ()
7666 (set (reg h-sp) (sub (reg h-sp) 2))
7667 (set (mem16 HI (reg h-sp)) (reg h-fb))
7668 (set (reg h-fb) (reg h-sp))
7669 (set (reg h-sp) (sub (reg h-sp) amt))))
7670
7671(define-pmacro (exit16-sem mach)
7672 (sequence ((SI newpc))
7673 (set (reg h-sp) (reg h-fb))
7674 (set (reg h-fb) (mem16 HI (reg h-sp)))
7675 (set (reg h-sp) (add (reg h-sp) 2))
7676 (set newpc (mem16 HI (reg h-sp)))
7677 (set (reg h-sp) (add (reg h-sp) 2))
7678 (set newpc (or newpc (sll (mem16 QI (reg h-sp)) (const 16))))
7679 (set (reg h-sp) (add (reg h-sp) 1))
7680 (set pc newpc)))
7681
7682(define-pmacro (enter32-sem mach amt)
7683 (sequence ()
7684 (set (reg h-sp) (sub (reg h-sp) 4))
7685 (set (mem32 SI (reg h-sp)) (reg h-fb))
7686 (set (reg h-fb) (reg h-sp))
7687 (set (reg h-sp) (sub (reg h-sp) amt))))
7688
7689(define-pmacro (exit32-sem mach)
7690 (sequence ((SI newpc))
7691 (set (reg h-sp) (reg h-fb))
7692 (set (reg h-fb) (mem32 SI (reg h-sp)))
7693 (set (reg h-sp) (add (reg h-sp) 4))
7694 (set newpc (mem32 SI (reg h-sp)))
7695 (set (reg h-sp) (add (reg h-sp) 4))
7696 (set pc newpc)))
7697
7698(dni enter16 "enter #Imm-16-QI" ((machine 16))
7699 ("enter #${Dsp-16-u8}")
7700 (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xF) (f-12-4 2) Dsp-16-u8)
7701 (enter16-sem 16 Dsp-16-u8)
7702 ())
7703
7704(dni exitd16 "exitd" ((machine 16))
7705 ("exitd")
7706 (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xF) (f-12-4 2))
7707 (exit16-sem 16)
7708 ())
7709
7710(dni enter32 "enter #Imm-8-QI" ((machine 32))
7711 ("enter #${Dsp-8-u8}")
7712 (+ (f-0-4 #xE) (f-4-4 #xC) Dsp-8-u8)
7713 (enter32-sem 32 Dsp-8-u8)
7714 ())
7715
7716(dni exitd32 "exitd" ((machine 32))
7717 ("exitd")
7718 (+ (f-0-4 #xF) (f-4-4 #xC))
7719 (exit32-sem 32)
7720 ())
7721
7722;-------------------------------------------------------------
7723; fclr - flag register clear
7724; fset - flag register set
7725;-------------------------------------------------------------
7726
7727(define-pmacro (set-flags-sem flag)
7728 (sequence ((SI tmp))
7729 (case DFLT flag
7730 ((#x0) (set cbit 1))
7731 ((#x1) (set dbit 1))
7732 ((#x2) (set zbit 1))
7733 ((#x3) (set sbit 1))
7734 ((#x4) (set bbit 1))
7735 ((#x5) (set obit 1))
7736 ((#x6) (set ibit 1))
7737 ((#x7) (set ubit 1)))
7738 )
7739 )
7740
7741(define-pmacro (clear-flags-sem flag)
7742 (sequence ((SI tmp))
7743 (case DFLT flag
7744 ((#x0) (set cbit 0))
7745 ((#x1) (set dbit 0))
7746 ((#x2) (set zbit 0))
7747 ((#x3) (set sbit 0))
7748 ((#x4) (set bbit 0))
7749 ((#x5) (set obit 0))
7750 ((#x6) (set ibit 0))
7751 ((#x7) (set ubit 0)))
7752 )
7753 )
7754
7755(dni fclr16 "fclr flag" ((machine 16))
7756 ("fclr ${flags16}")
7757 (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-1 0) flags16 (f-12-4 5))
7758 (clear-flags-sem flags16)
7759 ())
7760
7761(dni fset16 "fset flag" ((machine 16))
7762 ("fset ${flags16}")
7763 (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-1 0) flags16 (f-12-4 4))
7764 (set-flags-sem flags16)
7765 ())
7766
7767(dni fclr "fclr" ((machine 32))
7768 ("fclr ${flags32}")
7769 (+ (f-0-4 #xD) (f-4-4 3) (f-8-4 #xE) (f-12-1 1) flags32)
7770 (clear-flags-sem flags32)
7771 ())
7772
7773(dni fset "fset" ((machine 32))
7774 ("fset ${flags32}")
7775 (+ (f-0-4 #xD) (f-4-4 1) (f-8-4 #xE) (f-12-1 1) flags32)
7776 (set-flags-sem flags32)
7777 ())
7778
7779;-------------------------------------------------------------
7780; inc - increment
7781;-------------------------------------------------------------
7782
7783(define-pmacro (inc-sem mode dest)
7784 (sequence ((mode result))
7785 (set result (add mode dest 1))
7786 (set-z-and-s result)
7787 (set dest result))
7788)
7789
7790(dni inc16.b
7791 "inc.b Dst16-3-S-8"
7792 ((machine 16))
7793 "inc.b ${Dst16-3-S-8}"
7794 (+ (f-0-4 #xA) (f-4-1 #x0) Dst16-3-S-8)
7795 (inc-sem QI Dst16-3-S-8)
7796 ())
7797
7798(dni inc16.w
7799 "inc.w Dst16An-S"
7800 ((machine 16))
7801 "inc.w ${Dst16An-S}"
7802 (+ (f-0-4 #xB) (f-5-3 #x2) Dst16An-S)
7803 (inc-sem HI Dst16An-S)
7804 ())
7805
7806(unary32-defn QI .b 0 inc #xA #x0 #xE inc-sem)
7807(unary32-defn HI .w 1 inc #xA #x0 #xE inc-sem)
7808
7809;-------------------------------------------------------------
7810; freit - fast return from interrupt (m32)
7811; int - interrupt
7812; into - interrupt on overflow
7813;-------------------------------------------------------------
7814
7815; ??? semantics
7816(dni freit32 "FREIT" ((machine 32))
7817 ("freit")
7818 (+ (f-0-4 9) (f-4-4 #xF))
7819 (nop)
7820 ())
7821
7822(dni int16 "int Dsp-10-u6" ((machine 16))
7823 ("int #${Dsp-10-u6}")
7824 (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-2 3) Dsp-10-u6)
7825 (c-call VOID "do_int" pc Dsp-10-u6)
7826 ())
7827
7828(dni into16 "into" ((machine 16))
7829 ("into")
7830 (+ (f-0-4 #xF) (f-4-4 6))
7831 (nop)
7832 ())
7833
7834(dni int32 "int Dsp-8-u6" ((machine 32))
7835 ("int #${Dsp-8-u6}")
7836 (+ (f-0-4 #xB) (f-4-4 #xE) Dsp-8-u6 (f-14-2 0))
7837 (c-call VOID "do_int" pc Dsp-8-u6)
7838 ())
7839
7840(dni into32 "into" ((machine 32))
7841 ("into")
7842 (+ (f-0-4 #xB) (f-4-4 #xF))
7843 (nop)
7844 ())
7845
7846;-------------------------------------------------------------
7847; index (m32c)
7848;-------------------------------------------------------------
7849
7850; TODO add support to insns allowing index
7851(define-pmacro (indexb-sem mode d) (set SrcIndex d) (set DstIndex d))
7852(define-pmacro (indexbd-sem mode d) (set SrcIndex (const 0)) (set DstIndex d))
7853(define-pmacro (indexbs-sem mode d) (set SrcIndex d) (set DstIndex (const 0)))
7854(define-pmacro (indexw-sem mode d)
7855 (set SrcIndex (sll d (const 2))) (set DstIndex (sll d (const 2))))
7856(define-pmacro (indexwd-sem mode d)
7857 (set SrcIndex (const 0)) (set DstIndex (sll d (const 2))))
7858(define-pmacro (indexws-sem mode d)
7859 (set SrcIndex (sll d (const 2))) (set DstIndex (const 0)))
7860(define-pmacro (indexl-sem mode d)
7861 (set SrcIndex d) (set DstIndex (sll d (const 2))))
7862(define-pmacro (indexld-sem mode d)
7863 (set SrcIndex (const 0)) (set DstIndex (sll d (const 2))))
7864(define-pmacro (indexls-sem mode d)
7865 (set SrcIndex (sll d (const 2))) (set DstIndex (const 0)))
7866
7867; indexb src (index byte)
7868(unary32-defn QI .b 0 indexb #x8 0 #x3 indexb-sem)
7869(unary32-defn HI .w 0 indexb #x8 1 #x3 indexb-sem)
7870; indexbd src (index byte dest)
7871(unary32-defn QI .b 0 indexbd #xA 0 3 indexbd-sem)
7872(unary32-defn HI .w 0 indexbd #xA 1 3 indexbd-sem)
7873; indexbs src (index byte src)
7874(unary32-defn QI .b 0 indexbs #xC 0 3 indexbs-sem)
7875(unary32-defn HI .w 0 indexbs #xC 1 3 indexbs-sem)
7876; indexl src (index long)
7877(unary32-defn QI .b 0 indexl 9 2 3 indexl-sem)
7878(unary32-defn HI .w 0 indexl 9 3 3 indexl-sem)
7879; indexld src (index long dest)
7880(unary32-defn QI .b 0 indexld #xB 2 3 indexld-sem)
7881(unary32-defn HI .w 0 indexld #xB 3 3 indexld-sem)
7882; indexls src (index long src)
7883(unary32-defn QI .b 0 indexls 9 0 3 indexls-sem)
7884(unary32-defn HI .w 0 indexls 9 1 3 indexls-sem)
7885; indexw src (index word)
7886(unary32-defn QI .b 0 indexw 8 2 3 indexw-sem)
7887(unary32-defn HI .w 0 indexw 8 3 3 indexw-sem)
7888; indexwd src (index word dest)
7889(unary32-defn QI .b 0 indexwd #xA 2 3 indexwd-sem)
7890(unary32-defn HI .w 0 indexwd #xA 3 3 indexwd-sem)
7891; indexws (index word src)
7892(unary32-defn QI .b 0 indexws #xC 2 3 indexws-sem)
7893(unary32-defn HI .w 0 indexws #xC 3 3 indexws-sem)
7894
7895;-------------------------------------------------------------
7896; jcc - jump on condition
7897;-------------------------------------------------------------
7898
7899(define-pmacro (jcnd32-sem cnd label)
7900 (sequence ()
7901 (case DFLT cnd
7902 ((#x00) (if (not cbit) (set pc label))) ;ltu nc
7903 ((#x01) (if (not (and cbit (not zbit))) (set pc label))) ;leu
7904 ((#x02) (if (not zbit) (set pc label))) ;ne nz
7905 ((#x03) (if (not sbit) (set pc label))) ;pz
7906 ((#x04) (if (not obit) (set pc label))) ;no
7907 ((#x05) (if (not (or zbit (xor sbit obit))) (set pc label))) ;gt
7908 ((#x06) (if (not (xor sbit obit)) (set pc label))) ;ge
7909 ((#x08) (if (trunc BI cbit) (set pc label))) ;geu c
7910 ((#x09) (if (and cbit (not zbit)) (set pc label))) ;gtu
7911 ((#x0a) (if (trunc BI zbit) (set pc label))) ;eq z
7912 ((#x0b) (if (trunc BI sbit) (set pc label))) ;n
7913 ((#x0c) (if (trunc BI obit) (set pc label))) ;o
7914 ((#x0d) (if (or zbit (xor sbit obit)) (set pc label))) ;le
7915 ((#x0e) (if (xor sbit obit) (set pc label))) ;lt
7916 )
7917 )
7918 )
7919
7920(define-pmacro (jcnd16-sem cnd label)
7921 (sequence ()
7922 (case DFLT cnd
7923 ((#x00) (if (trunc BI cbit) (set pc label))) ;geu c
7924 ((#x01) (if (and cbit (not zbit)) (set pc label))) ;gtu
7925 ((#x02) (if (trunc BI zbit) (set pc label))) ;eq z
7926 ((#x03) (if (trunc BI sbit) (set pc label))) ;n
7927 ((#x04) (if (not cbit) (set pc label))) ;ltu nc
7928 ((#x05) (if (not (and cbit (not zbit))) (set pc label))) ;leu
7929 ((#x06) (if (not zbit) (set pc label))) ;ne nz
7930 ((#x07) (if (not sbit) (set pc label))) ;pz
7931 ((#x08) (if (or zbit (xor sbit obit)) (set pc label))) ;le
7932 ((#x09) (if (trunc BI obit) (set pc label))) ;o
7933 ((#x0a) (if (not (xor sbit obit)) (set pc label))) ;ge
7934 ((#x0c) (if (not (or zbit (xor sbit obit))) (set pc label))) ;gt
7935 ((#x0d) (if (not obit) (set pc label))) ;no
7936 ((#x0e) (if (xor sbit obit) (set pc label))) ;lt
7937 )
7938 )
7939 )
7940
7941(dni jcnd16-5
7942 "jCnd label"
7943 ((machine 16))
7944 "j$cond16j5 ${Lab-8-8}"
7945 (+ (f-0-4 #x6) (f-4-1 1) cond16j5 Lab-8-8)
7946 (jcnd16-sem cond16j5 Lab-8-8)
7947 ()
7948)
7949
7950(dni jcnd16
7951 "jCnd label"
7952 ((machine 16))
7953 "j$cond16j ${Lab-16-8}"
7954 (+ (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #xC) cond16j Lab-16-8)
7955 (jcnd16-sem cond16j Lab-16-8)
7956 ()
7957)
7958
7959(dni jcnd32
7960 "jCnd label"
7961 ((machine 32))
7962 "j$cond32j ${Lab-8-8}"
7963 (+ (f-0-1 1) (f-4-3 5) cond32j Lab-8-8)
7964 (jcnd32-sem cond32j Lab-8-8)
7965 ()
7966)
7967
7968;-------------------------------------------------------------
7969; jmp - jump
7970;-------------------------------------------------------------
7971
7972; jmp.s label3 (m16 #1)
7973(dni jmp16.s "jmp.s Lab-5-3" ((machine 16))
7974 ("jmp.s ${Lab-5-3}")
7975 (+ (f-0-4 6) (f-4-1 0) Lab-5-3)
7976 (sequence () (set pc Lab-5-3))
7977 ())
7978; jmp.b label8 (m16 #2)
7979(dni jmp16.b "jmp.b Lab-8-8" ((machine 16))
7980 ("jmp.b ${Lab-8-8}")
7981 (+ (f-0-4 #xF) (f-4-4 #xE) Lab-8-8)
7982 (sequence () (set pc Lab-8-8))
7983 ())
7984; jmp.w label16 (m16 #3)
7985(dni jmp16.w "jmp.w Lab-8-16" ((machine 16))
7986 ("jmp.w ${Lab-8-16}")
7987 (+ (f-0-4 #xF) (f-4-4 4) Lab-8-16)
7988 (sequence () (set pc Lab-8-16))
7989 ())
7990; jmp.a label24 (m16 #4)
7991(dni jmp16.a "jmp.a Lab-8-24" ((machine 16))
7992 ("jmp.a ${Lab-8-24}")
7993 (+ (f-0-4 #xF) (f-4-4 #xC) Lab-8-24)
7994 (sequence () (set pc Lab-8-24))
7995 ())
7996
7997(define-pmacro (jmp16-sem mode dst)
7998 (set pc (and dst #xfffff))
7999)
8000(define-pmacro (jmp32-sem mode dst)
8001 (set pc dst)
8002)
8003; jmpi.w dst (m16 #1 m32 #2)
8004(unary-insn-defn 16 16 HI .w jmpi (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 2) dst16-16-HI) jmp16-sem)
8005(unary-insn-defn 32 16-Unprefixed HI .w jmpi (+ (f-0-4 #xC) (f-7-1 1) dst32-16-Unprefixed-HI (f-10-2 #x0) (f-12-4 #xF)) jmp32-sem)
8006; jmpi.a dst (m16 #2 m32 #2)
8007(unary-insn-defn 16 16 SI .a jmpi (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 0) dst16-16-SI) jmp16-sem)
8008(unary-insn-defn 32 16-Unprefixed SI .a jmpi (+ (f-0-4 #x8) (f-7-1 0) dst32-16-Unprefixed-SI (f-10-2 #x0) (f-12-4 1)) jmp32-sem)
8009; jmps imm8 (m16 #1)
8010(dni jmps16 "jmps Imm-8-QI" ((machine 16))
8011 ("jmps #${Imm-8-QI}")
8012 (+ (f-0-4 #xE) (f-4-4 #xE) Imm-8-QI)
8013 (sequence () (set pc Imm-8-QI))
8014 ())
8015; jmp.s label3 (m32 #1)
8016(dni jmp32.s
8017 "jmp.s label"
8018 ((machine 32))
8019 "jmp.s ${Lab32-jmp-s}"
8020 (+ (f-0-2 1) (f-4-3 5) Lab32-jmp-s)
8021 (set pc Lab32-jmp-s)
8022 ()
8023)
8024; jmp.b label8 (m32 #2)
8025(dni jmp32.b "jmp.b Lab-8-8" ((machine 32))
8026 ("jmp.b ${Lab-8-8}")
8027 (+ (f-0-4 #xB) (f-4-4 #xB) Lab-8-8)
8028 (set pc Lab-8-8)
8029 ())
8030; jmp.w label16 (m32 #3)
8031(dni jmp32.w "jmp.w Lab-8-16" ((machine 32))
8032 ("jmp.w ${Lab-8-16}")
8033 (+ (f-0-4 #xC) (f-4-4 #xE) Lab-8-16)
8034 (set pc Lab-8-16)
8035 ())
8036; jmp.a label24 (m32 #4)
8037(dni jmp32.a "jmp.a Lab-8-24" ((machine 32))
8038 ("jmp.a ${Lab-8-24}")
8039 (+ (f-0-4 #xC) (f-4-4 #xC) Lab-8-24)
8040 (set pc Lab-8-24)
8041 ())
8042; jmp.s imm8 (m32 #1)
8043(dni jmps32 "jmps Imm-8-QI" ((machine 32))
8044 ("jmps #${Imm-8-QI}")
8045 (+ (f-0-4 #xD) (f-4-4 #xC) Imm-8-QI)
8046 (set pc Imm-8-QI)
8047 ())
8048
8049;-------------------------------------------------------------
8050; jsr jump subroutine
8051;-------------------------------------------------------------
8052
8053(define-pmacro (jsr16-sem length dst)
8054 (sequence ((SI tpc))
8055 (set tpc (add pc length))
8056 (set (reg h-sp) (sub (reg h-sp) 2))
8057 (set (mem16 HI (reg h-sp)) (srl (and tpc #xffff00) 8))
8058 (set (reg h-sp) (sub (reg h-sp) 1))
8059 (set (mem16 QI (reg h-sp)) (and tpc #xff))
8060 (set pc dst)
8061 )
8062)
8063(define-pmacro (jsr32-sem length dst)
8064 (sequence ((SI tpc))
8065 (set tpc (add pc length))
8066 (set (reg h-sp) (sub (reg h-sp) 2))
8067 (set (mem32 HI (reg h-sp)) (srl (and tpc #xffff0000) 16))
8068 (set (reg h-sp) (sub (reg h-sp) 2))
8069 (set (mem32 HI (reg h-sp)) (and tpc #xffff))
8070 (set pc dst)
8071 )
8072)
8073
8074; jsr.w label16 (m16 #1)
8075(dni jsr16.w "jsr.w Lab-8-16" ((machine 16))
8076 ("jsr.w ${Lab-8-16}")
8077 (+ (f-0-4 #xF) (f-4-4 5) Lab-8-16)
8078 (jsr16-sem 3 Lab-8-16)
8079 ())
8080; jsr.a label24 (m16 #2)
8081(dni jsr16.a "jsr.a Lab-8-24" ((machine 16))
8082 ("jsr.a ${Lab-8-24}")
8083 (+ (f-0-4 #xF) (f-4-4 #xD) Lab-8-24)
8084 (jsr16-sem 4 Lab-8-24)
8085 ())
8086(define-pmacro (jsri-defn mode op16 op16-1 op16-2 op16-3 op16-sem
8087 op32 op32-1 op32-2 op32-3 op32-4 op32-sem len)
8088 (begin
8089 (dni (.sym jsri16 mode - op16)
8090 (.str "jsri." mode " " op16)
8091 ((machine 16))
8092 (.str "jsri." mode " ${" op16 "}")
8093 (+ op16-1 op16-2 op16-3 op16)
8094 (op16-sem len op16)
8095 ())
8096 (dni (.sym jsri32 mode - op32)
8097 (.str "jsri." mode " " op32)
8098 ((machine 32))
8099 (.str "jsri." mode " ${" op32 "}")
8100 (+ op32-1 op32-2 op32-3 op32-4 op32)
8101 (op32-sem len op32)
8102 ())
8103 )
8104 )
8105; jsri.w dst (m16 #1 m32 #1))
8106(jsri-defn w dst16-basic-HI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x3) jsr16-sem
8107 dst32-basic-Unprefixed-HI (f-0-4 #xC) (f-7-1 1) (f-10-2 #x1) (f-12-4 #xF) jsr32-sem 2)
8108(jsri-defn w dst16-16-8-HI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x3) jsr16-sem
8109 dst32-16-8-Unprefixed-HI (f-0-4 #xC) (f-7-1 1) (f-10-2 #x1) (f-12-4 #xF) jsr32-sem 3)
8110(jsri-defn w dst16-16-16-HI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x3) jsr16-sem
8111 dst32-16-16-Unprefixed-HI (f-0-4 #xC) (f-7-1 1) (f-10-2 #x1) (f-12-4 #xF) jsr32-sem 4)
8112(dni jsri32.w "jsr.w dst32-16-24-Unprefixed-HI" ((machine 32))
8113 ("jsri.w ${dst32-16-24-Unprefixed-HI}")
8114 (+ (f-0-4 #xC) (f-7-1 1) dst32-16-24-Unprefixed-HI (f-10-2 #x1) (f-12-4 #xF))
8115 (jsr32-sem 6 dst32-16-24-Unprefixed-HI)
8116 ())
8117
8118; jsri.a (m16 #2 m32 #2)
8119(jsri-defn a dst16-basic-SI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x1) jsr16-sem
8120 dst32-basic-Unprefixed-SI (f-0-4 #x9) (f-7-1 0) (f-10-2 #x0) (f-12-4 #x1) jsr32-sem 2)
8121(jsri-defn a dst16-16-8-SI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x1) jsr16-sem
8122 dst32-16-8-Unprefixed-SI (f-0-4 #x9) (f-7-1 0) (f-10-2 #x0) (f-12-4 #x1) jsr32-sem 3)
8123(jsri-defn a dst16-16-16-SI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x1) jsr16-sem
8124 dst32-16-16-Unprefixed-SI (f-0-4 #x9) (f-7-1 0) (f-10-2 #x0) (f-12-4 #x1) jsr32-sem 4)
8125(dni jsri32.a "jsr.w dst32-16-24-Unprefixed-HI" ((machine 32))
8126 ("jsri.w ${dst32-16-24-Unprefixed-SI}")
8127 (+ (f-0-4 #x9) (f-7-1 0) dst32-16-24-Unprefixed-SI (f-10-2 #x0) (f-12-4 #x1))
8128 (jsr32-sem 6 dst32-16-24-Unprefixed-SI)
8129 ())
8130; jsr.w label16 (m32 #1)
8131(dni jsr32.w "jsr.w label" ((machine 32))
8132 ("jsr.w ${Lab-8-16}")
8133 (+ (f-0-4 #xC) (f-4-4 #xF) Lab-8-16)
8134 (jsr32-sem 3 Lab-8-16)
8135 ())
8136; jsr.a label16 (m32 #2)
8137(dni jsr32.a "jsr.a label" ((machine 32))
8138 ("jsr.a ${Lab-8-24}")
8139 (+ (f-0-4 #xC) (f-4-4 #xD) Lab-8-24)
8140 (jsr32-sem 4 Lab-8-24)
8141 ())
8142; jsrs imm8 (m16 #1)
8143(dni jsrs16 "jsrs Imm-8-QI" ((machine 16))
8144 ("jsrs #${Imm-8-QI}")
8145 (+ (f-0-4 #xE) (f-4-4 #xF) Imm-8-QI)
8146 (jsr16-sem 2 Imm-8-QI)
8147 ())
8148; jsrs imm8 (m32 #1)
8149(dni jsrs "jsrs #Imm-8-QI" ((machine 32))
8150 ("jsrs #${Imm-8-QI}")
8151 (+ (f-0-4 #xD) (f-4-4 #xD) Imm-8-QI)
8152 (jsr32-sem 2 Imm-8-QI)
8153 ())
8154
8155;-------------------------------------------------------------
8156; ldc - load control register
8157; stc - store control register
8158;-------------------------------------------------------------
8159
8160(define-pmacro (ldc32-cr1-sem src dst)
8161 (sequence ()
8162 (case DFLT dst
8163 ((#x0) (set (reg h-dct0) src))
8164 ((#x1) (set (reg h-dct1) src))
8165 ((#x2) (sequence ((HI tflag))
8166 (set tflag src)
8167 (if (and tflag #x1) (set cbit 1))
8168 (if (and tflag #x2) (set dbit 1))
8169 (if (and tflag #x4) (set zbit 1))
8170 (if (and tflag #x8) (set sbit 1))
8171 (if (and tflag #x10) (set bbit 1))
8172 (if (and tflag #x20) (set obit 1))
8173 (if (and tflag #x40) (set ibit 1))
8174 (if (and tflag #x80) (set ubit 1))))
8175 ((#x3) (set (reg h-svf) src))
8176 ((#x4) (set (reg h-drc0) src))
8177 ((#x5) (set (reg h-drc1) src))
8178 ((#x6) (set (reg h-dmd0) src))
8179 ((#x7) (set (reg h-dmd1) src))
8180 )
8181 )
8182)
8183(define-pmacro (ldc32-cr2-sem src dst)
8184 (sequence ()
8185 (case DFLT dst
8186 ((#x0) (set (reg h-intb) src))
8187 ((#x1) (set (reg h-sp) src))
8188 ((#x2) (set (reg h-sb) src))
8189 ((#x3) (set (reg h-fb) src))
8190 ((#x4) (set (reg h-svp) src))
8191 ((#x5) (set (reg h-vct) src))
8192 ((#x7) (set (reg h-isp) src))
8193 )
8194 )
8195)
8196(define-pmacro (ldc32-cr3-sem src dst)
8197 (sequence ()
8198 (case DFLT dst
8199 ((#x2) (set (reg h-dma0) src))
8200 ((#x3) (set (reg h-dma1) src))
8201 ((#x4) (set (reg h-dra0) src))
8202 ((#x5) (set (reg h-dra1) src))
8203 ((#x6) (set (reg h-dsa0) src))
8204 ((#x7) (set (reg h-dsa1) src))
8205 )
8206 )
8207)
8208(define-pmacro (ldc16-sem src dst)
8209 (sequence ()
8210 (case DFLT dst
8211 ((#x1) (set (reg h-intb) src))
8212 ((#x2) (set (reg h-intb) (or (reg h-intb) (sll src (const 16)))))
8213 ((#x3) (sequence ((HI tflag))
8214 (set tflag src)
8215 (if (and tflag #x1) (set cbit 1))
8216 (if (and tflag #x2) (set dbit 1))
8217 (if (and tflag #x4) (set zbit 1))
8218 (if (and tflag #x8) (set sbit 1))
8219 (if (and tflag #x10) (set bbit 1))
8220 (if (and tflag #x20) (set obit 1))
8221 (if (and tflag #x40) (set ibit 1))
8222 (if (and tflag #x80) (set ubit 1))))
8223 ((#x4) (set (reg h-isp) src))
8224 ((#x5) (set (reg h-sp) src))
8225 ((#x6) (set (reg h-sb) src))
8226 ((#x7) (set (reg h-fb) src))
8227 )
8228 )
8229)
8230
8231(define-pmacro (stc32-cr1-sem src dst)
8232 (sequence ()
8233 (case DFLT src
8234 ((#x0) (set dst (reg h-dct0)))
8235 ((#x1) (set dst (reg h-dct1)))
8236 ((#x2) (sequence ((HI tflag))
8237 (set tflag 0)
8238 (if (eq cbit 1) (set tflag (or tflag #x1)))
8239 (if (eq dbit 1) (set tflag (or tflag #x2)))
8240 (if (eq zbit 1) (set tflag (or tflag #x4)))
8241 (if (eq sbit 1) (set tflag (or tflag #x8)))
8242 (if (eq bbit 1) (set tflag (or tflag #x10)))
8243 (if (eq obit 1) (set tflag (or tflag #x20)))
8244 (if (eq ibit 1) (set tflag (or tflag #x40)))
8245 (if (eq ubit 1) (set tflag (or tflag #x80)))
8246 (set dst tflag)))
8247 ((#x3) (set dst (reg h-svf)))
8248 ((#x4) (set dst (reg h-drc0)))
8249 ((#x5) (set dst (reg h-drc1)))
8250 ((#x6) (set dst (reg h-dmd0)))
8251 ((#x7) (set dst (reg h-dmd1)))
8252 )
8253 )
8254)
8255(define-pmacro (stc32-cr2-sem src dst)
8256 (sequence ()
8257 (case DFLT src
8258 ((#x0) (set dst (reg h-intb)))
8259 ((#x1) (set dst (reg h-sp)))
8260 ((#x2) (set dst (reg h-sb)))
8261 ((#x3) (set dst (reg h-fb)))
8262 ((#x4) (set dst (reg h-svp)))
8263 ((#x5) (set dst (reg h-vct)))
8264 ((#x7) (set dst (reg h-isp)))
8265 )
8266 )
8267)
8268(define-pmacro (stc32-cr3-sem src dst)
8269 (sequence ()
8270 (case DFLT src
8271 ((#x2) (set dst (reg h-dma0)))
8272 ((#x3) (set dst (reg h-dma1)))
8273 ((#x4) (set dst (reg h-dra0)))
8274 ((#x5) (set dst (reg h-dra1)))
8275 ((#x6) (set dst (reg h-dsa0)))
8276 ((#x7) (set dst (reg h-dsa1)))
8277 )
8278 )
8279)
8280(define-pmacro (stc16-sem src dst)
8281 (sequence ()
8282 (case DFLT src
8283 ((#x1) (set dst (and (reg h-intb) (const #xffff))))
8284 ((#x2) (set dst (srl (reg h-intb) (const 16))))
8285 ((#x3) (sequence ((HI tflag))
8286 (set tflag 0)
8287 (if (eq cbit 1) (set tflag (or tflag #x1)))
8288 (if (eq dbit 1) (set tflag (or tflag #x2)))
8289 (if (eq zbit 1) (set tflag (or tflag #x4)))
8290 (if (eq sbit 1) (set tflag (or tflag #x8)))
8291 (if (eq bbit 1) (set tflag (or tflag #x10)))
8292 (if (eq obit 1) (set tflag (or tflag #x20)))
8293 (if (eq ibit 1) (set tflag (or tflag #x40)))
8294 (if (eq ubit 1) (set tflag (or tflag #x80)))
8295 (set dst tflag)))
8296 ((#x4) (set dst (reg h-isp)))
8297 ((#x5) (set dst (reg h-sp)))
8298 ((#x6) (set dst (reg h-sb)))
8299 ((#x7) (set dst (reg h-fb)))
8300 )
8301 )
8302)
8303
8304(dni ldc16.imm16 "ldc #imm,dst" ((machine 16))
8305 ("ldc #${Imm-16-HI},${cr16}")
8306 (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-1 0) (f-12-4 0) cr16 Imm-16-HI)
8307 (ldc16-sem Imm-16-HI cr16)
8308 ())
8309
8310(dni ldc16.dst "ldc src,dest" ((machine 16))
8311 ("ldc ${dst16-16-HI},${cr16}")
8312 (+ (f-0-4 7) (f-4-4 #xA) (f-8-1 1) cr16 dst16-16-HI)
8313 (ldc16-sem dst16-16-HI cr16)
8314 ())
8315; ldc src,dest (m32c #4)
8316(dni ldc32.src-cr1 "ldc src,dst" ((machine 32))
8317 ("ldc ${dst32-24-Prefixed-HI},${cr1-Prefixed-32}")
8318 (+ (f-0-4 0) (f-4-4 1) (f-8-4 #xD) dst32-24-Prefixed-HI (f-15-1 1) (f-18-2 0) (f-20-1 1) cr1-Prefixed-32)
8319 (ldc32-cr1-sem dst32-24-Prefixed-HI cr1-Prefixed-32)
8320 ())
8321; ldc src,dest (m32c #5)
8322(dni ldc32.src-cr2 "ldc src,dest" ((machine 32))
8323 ("ldc ${dst32-16-Unprefixed-SI},${cr2-32}")
8324 (+ (f-0-4 #xD) dst32-16-Unprefixed-SI (f-7-1 1) (f-10-2 0) (f-12-1 0) cr2-32)
8325 (ldc32-cr2-sem dst32-16-Unprefixed-SI cr2-32)
8326 ())
8327; ldc src,dest (m32c #6)
8328(dni ldc32.src-cr3 "ldc src,dst" ((machine 32))
8329 ("ldc ${dst32-24-Prefixed-SI},${cr3-Prefixed-32}")
8330 (+ (f-0-4 0) (f-4-4 1) (f-8-4 #xD) dst32-24-Prefixed-SI (f-15-1 1) (f-18-2 0) (f-20-1 0) cr3-Prefixed-32)
8331 (ldc32-cr3-sem dst32-24-Prefixed-SI cr3-Prefixed-32)
8332 ())
8333; ldc src,dest (m32c #1)
8334(dni ldc32.imm16-cr1 "ldc #imm,dst" ((machine 32))
8335 ("ldc #${Imm-16-HI},${cr1-Unprefixed-32}")
8336 (+ (f-0-4 #xD) (f-4-4 5) (f-8-4 #xA) (f-12-1 1) cr1-Unprefixed-32 Imm-16-HI)
8337 (ldc32-cr1-sem Imm-16-HI cr1-Unprefixed-32)
8338 ())
8339; ldc src,dest (m32c #2)
8340(dni ldc32.imm16-cr2 "ldc #imm,dst" ((machine 32))
8341 ("ldc #${Dsp-16-u24},${cr2-32}")
8342 (+ (f-0-4 #xD) (f-4-4 5) (f-8-4 2) (f-12-1 1) cr2-32 Dsp-16-u24)
8343 (ldc32-cr2-sem Dsp-16-u24 cr2-32)
8344 ())
8345; ldc src,dest (m32c #3)
8346(dni ldc32.imm16-cr3 "ldc #imm,dst" ((machine 32))
8347 ("ldc #${Dsp-16-u24},${cr3-Unprefixed-32}")
8348 (+ (f-0-4 #xD) (f-4-4 5) (f-8-4 6) (f-12-1 1) cr3-Unprefixed-32 Dsp-16-u24)
8349 (ldc32-cr3-sem Dsp-16-u24 cr3-Unprefixed-32)
8350 ())
8351
8352(dni stc16.src "stc src,dest" ((machine 16))
8353 ("stc ${cr16},${dst16-16-HI}")
8354 (+ (f-0-4 7) (f-4-4 #xB) (f-8-1 1) cr16 dst16-16-HI)
8355 (stc16-sem cr16 dst16-16-HI )
8356 ())
8357
8358(dni stc16.pc "stc pc,dest" ((machine 16))
8359 ("stc pc,${dst16-16-HI}")
8360 (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xC) dst16-16-HI)
8361 (sequence () (set dst16-16-HI (reg h-pc)))
8362 ())
8363
8364(dni stc32.src-cr1 "stc src,dst" ((machine 32))
8365 ("stc ${cr1-Prefixed-32},${dst32-24-Prefixed-HI}")
8366 (+ (f-0-4 0) (f-4-4 1) (f-8-4 #xD) dst32-24-Prefixed-HI (f-15-1 1) (f-18-2 1) (f-20-1 1) cr1-Prefixed-32)
8367 (stc32-cr1-sem cr1-Prefixed-32 dst32-24-Prefixed-HI )
8368 ())
8369
8370(dni stc32.src-cr2 "stc src,dest" ((machine 32))
8371 ("stc ${cr2-32},${dst32-16-Unprefixed-SI}")
8372 (+ (f-0-4 #xD) dst32-16-Unprefixed-SI (f-7-1 1) (f-10-2 0) (f-12-1 2) cr2-32)
8373 (stc32-cr2-sem cr2-32 dst32-16-Unprefixed-SI )
8374 ())
8375
8376(dni stc32.src-cr3 "stc src,dst" ((machine 32))
8377 ("stc ${cr3-Prefixed-32},${dst32-24-Prefixed-SI}")
8378 (+ (f-0-4 0) (f-4-4 1) (f-8-4 #xD) dst32-24-Prefixed-SI (f-15-1 1) (f-18-2 1) (f-20-1 0) cr3-Prefixed-32)
8379 (stc32-cr3-sem cr3-Prefixed-32 dst32-24-Prefixed-SI )
8380 ())
8381
8382;-------------------------------------------------------------
8383; ldctx - load context
8384; stctx - store context
8385;-------------------------------------------------------------
8386
8387; ??? semantics
8388(dni ldctx16 "ldctx abs16,abs24" ((machine 16))
8389 ("ldctx ${Dsp-16-u16},${Dsp-32-u24}")
8390 (+ (f-0-4 #x7) (f-4-4 #xC) (f-8-4 #xF) (f-12-4 #x0) Dsp-16-u16 Dsp-32-u24)
8391 (nop)
8392 ())
8393(dni ldctx32 "ldctx abs16,abs24" ((machine 32))
8394 ("ldctx ${Dsp-16-u16},${Dsp-32-u24}")
8395 (+ (f-0-4 #xB) (f-4-4 #x6) (f-8-4 #xC) (f-12-4 #x3) Dsp-16-u16 Dsp-32-u24)
8396 (nop)
8397 ())
8398(dni stctx16 "stctx abs16,abs24" ((machine 16))
8399 ("stctx ${Dsp-16-u16},${Dsp-32-u24}")
8400 (+ (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #xF) (f-12-4 #x0) Dsp-16-u16 Dsp-32-u24)
8401 (nop)
8402 ())
8403(dni stctx32 "stctx abs16,abs24" ((machine 32))
8404 ("stctx ${Dsp-16-u16},${Dsp-32-u24}")
8405 (+ (f-0-4 #xB) (f-4-4 #x6) (f-8-4 #xD) (f-12-4 #x3) Dsp-16-u16 Dsp-32-u24)
8406 (nop)
8407 ())
8408
8409;-------------------------------------------------------------
8410; lde - load from extra far data area (m16)
8411; ste - store to extra far data area (m16)
8412;-------------------------------------------------------------
8413
8414; A special variant of mem16 for lde and ste
8415(define-pmacro (extra-mem16 mode address)
8416 (mem mode (and #xfffff address)))
8417
8418(define-pmacro (lde-sem mode src1 dst)
8419 (set mode src1 (extra-mem16 mode dst))
8420)
8421(lde-dst QI .b 0 lde (f-0-4 #x7) (f-4-3 2) (f-8-4 #x8) lde-sem)
8422(lde-dst HI .w 1 lde (f-0-4 #x7) (f-4-3 2) (f-8-4 #x8) lde-sem)
8423
8424(define-pmacro (ste-sem mode src1 dst)
8425 (set (extra-mem16 mode dst) src1)
8426)
8427(ste-dst QI .b 0 ste (f-0-4 #x7) (f-4-3 2) (f-8-4 #x0) ste-sem)
8428(ste-dst HI .w 1 ste (f-0-4 #x7) (f-4-3 2) (f-8-4 #x0) ste-sem)
8429
8430;-------------------------------------------------------------
8431; ldipl - load interrupt permission level
8432;-------------------------------------------------------------
8433
8434; ??? semantics
8435; ldintb <==> ldc #imm,intbh ; ldc #imm,intbl
8436(dni ldipl16.imm "ldipl #imm" ((machine 16))
8437 ("ldipl #${Imm-13-u3}")
8438 (+ (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #xA) (f-12-1 0) Imm-13-u3)
8439 (nop)
8440 ())
8441(dni ldipl32.imm "ldipl #imm" ((machine 32))
8442 ("ldipl #${Imm-13-u3}")
8443 (+ (f-0-4 #xD) (f-4-4 5) (f-8-4 #xE) (f-12-1 1) Imm-13-u3)
8444 (nop)
8445 ())
8446
8447
8448;-------------------------------------------------------------
8449; max - maximum value
8450;-------------------------------------------------------------
8451
8452; TODO check semantics for min -1,0
8453(define-pmacro (max-sem mode src dst)
8454 (sequence ()
8455 (if (gt mode src dst)
8456 (set mode dst src)))
8457)
8458
8459; max.size:G #imm,dst
8460(binary-arith32-imm-dst-Prefixed QI QI .b 0 max X #x8 #x3 #xF max-sem)
8461(binary-arith32-imm-dst-Prefixed HI HI .w 1 max X #x8 #x3 #xF max-sem)
8462
8463; max.BW:G src,dst
8464(binary-arith32-src-dst-Prefixed QI QI .b 0 max X #x1 #xD max-sem)
8465(binary-arith32-src-dst-Prefixed HI HI .w 1 max X #x1 #xD max-sem)
8466
8467;-------------------------------------------------------------
8468; min - minimum value
8469;-------------------------------------------------------------
8470
8471(define-pmacro (min-sem mode src dst)
8472 (sequence ()
8473 (if (lt mode src dst)
8474 (set mode dst src)))
8475)
8476
8477; min.size:G #imm,dst
8478(binary-arith32-imm-dst-Prefixed QI QI .b 0 min X #x8 #x2 #xF min-sem)
8479(binary-arith32-imm-dst-Prefixed HI HI .w 1 min X #x8 #x2 #xF min-sem)
8480
8481; min.BW:G src,dst
8482(binary-arith32-src-dst-Prefixed QI QI .b 0 min X #x1 #xC min-sem)
8483(binary-arith32-src-dst-Prefixed HI HI .w 1 min X #x1 #xC min-sem)
8484
8485;-------------------------------------------------------------
8486; mov - move
8487;-------------------------------------------------------------
8488
8489(define-pmacro (mov-sem mode src1 dst)
8490 (sequence ((mode result))
8491 (set result src1)
8492 (set-z-and-s result)
8493 (set mode dst src1))
8494)
8495
8496(define-pmacro (mov-dspsp-dst-sem mach mode src1 dst)
8497 (set dst (mem-mach mach mode (add sp src1)))
8498)
8499
8500(define-pmacro (mov-src-dspsp-sem mach mode src dst1)
8501 (set (mem-mach mach mode (add sp dst1)) src)
8502)
8503
8504(define-pmacro (mov16-imm-an-defn size mode imm regn op1 op2)
8505 (dni (.sym mov16. size .S-imm- regn)
8506 (.str "mov." size ":S " imm "," regn)
8507 ((machine 16))
8508 (.str "mov." size "$S #${" imm "}," regn)
8509 (+ op1 op2 imm)
8510 (mov-sem mode imm (reg (.sym h- regn)))
8511 ())
8512)
8513; mov.size:G #imm,dst (m16 #1 m32 #1)
8514(binary-arith-imm-dst mov G (f-0-4 7) (f-4-3 2) (f-8-4 #xC) #x9 #x2 #xF mov-sem)
8515; mov.L:G #imm32,dst (m32 #2)
8516(binary-arith32-imm-dst-defn SI SI .l 0 mov G #xB #x3 #x1 mov-sem)
8517; mov.size:Q #imm4,dst (m16 #2 m32 #3)
8518(binary-arith16-imm4-dst-defn QI .b 0 0 mov (f-0-4 #xD) (f-4-3 4) mov-sem)
8519(binary-arith16-imm4-dst-defn QI .w 0 1 mov (f-0-4 #xD) (f-4-3 4) mov-sem)
8520(binary-arith32-imm4-dst-defn QI .b 1 0 mov #x7 #x2 mov-sem)
8521(binary-arith32-imm4-dst-defn HI .w 1 1 mov #x7 #x2 mov-sem)
8522; mov.BW:S #imm,dst2 (m32 #4)
8523(binary-arith32-s-imm-dst QI .b 0 mov #x0 #x2 mov-sem)
8524(binary-arith32-s-imm-dst HI .w 1 mov #x0 #x2 mov-sem)
8525; mov.b:S #imm8,dst3 (m16 #3)
8526(binary-arith16-b-S-imm8-dst3 mov ".b" (f-0-4 #xC) (f-4-1 0) mov-sem)
8527; mov.b:S #imm8,aN (m16 #4)
8528(mov16-imm-an-defn b QI Imm-8-QI a0 (f-0-4 #xE) (f-4-4 2))
8529(mov16-imm-an-defn b QI Imm-8-QI a1 (f-0-4 #xE) (f-4-4 #xA))
8530(mov16-imm-an-defn w HI Imm-8-HI a0 (f-0-4 #xA) (f-4-4 2))
8531(mov16-imm-an-defn w HI Imm-8-HI a1 (f-0-4 #xA) (f-4-4 #xA))
8532; mov.WL:S #imm,A0/A1 (m32 #5)
8533(define-pmacro (mov32-wl-s-defn mode sz op1 imm regn op2)
8534 (dni (.sym mov32- sz - regn)
8535 (.str "mov." sz ":s" imm "," regn)
8536 ((machine 32))
8537 (.str "mov." sz "$S #${" imm "}," regn)
8538 (+ (f-0-4 op1) (f-4-4 op2) imm)
8539 (mov-sem mode imm (reg (.sym h- regn)))
8540 ())
8541)
8542(mov32-wl-s-defn HI w #x9 Imm-8-HI a0 #xC)
8543(mov32-wl-s-defn HI w #x9 Imm-8-HI a1 #xD)
8544(mov32-wl-s-defn SI l #xB Dsp-16-u24 a0 #xC)
8545(mov32-wl-s-defn SI l #xB Dsp-16-u24 a1 #xD)
8546
8547; mov.BW:Z #0,dst (m16 #5 m32 #6)
8548(dni mov16.b-Z-imm8-dst3
8549 "mov.b:Z #0,Dst16-3-S-8"
8550 ((machine 16))
8551 "mov.b$Z #0,${Dst16-3-S-8}"
8552 (+ (f-0-4 #xB) (f-4-1 #x0) Dst16-3-S-8)
8553 (mov-sem QI (const 0) Dst16-3-S-8)
8554 ())
8555; (binary-arith16-b-Z-imm8-dst3 mov ".b" (f-0-4 #xB) (f-4-1 0) mov-sem)
8556(binary-arith32-z-imm-dst QI .b 0 mov #x0 #x1 mov-sem)
8557(binary-arith32-z-imm-dst HI .w 1 mov #x0 #x1 mov-sem)
8558; mov.BW:G src,dst (m16 #6 m32 #7)
8559(binary-arith-src-dst mov G (f-0-4 #x7) (f-4-3 1) #x1 #xB mov-sem)
8560; mov.B:S src2,a0/a1 (m16 #7)
8561(dni (.sym mov 16 .b.S-An)
8562 (.str mov ".b:S src2,a[01]")
8563 ((machine 16))
8564 (.str mov ".b$S ${src16-2-S},${Dst16AnQI-S}")
8565 (+ (f-0-4 #x3) (f-4-1 0) Dst16AnQI-S src16-2-S)
8566 (mov-sem QI src16-2-S Dst16AnQI-S)
8567 ())
8568(define-pmacro (mov16-b-s-an-defn op1 op2 op2c)
8569 (dni (.sym mov16.b.S- op1 - op2)
8570 (.str mov ".b:S " op1 "," op2)
8571 ((machine 16))
8572 (.str mov ".b$S " op1 "," op2)
8573 (+ (f-0-4 #x3) op2c)
8574 (mov-sem QI (reg (.sym h- op1)) (reg (.sym h- op2)))
8575 ())
8576 )
8577(mov16-b-s-an-defn r0l a1 (f-4-4 #x4))
8578(mov16-b-s-an-defn r0h a0 (f-4-4 #x0))
8579
8580; mov.L:G src,dst (m32 #8)
8581(binary-arith32-src-dst-defn SI SI .l 1 mov G #x1 #x3 mov-sem)
8582; mov.B:S r0l/r0h,dst2 (m16 #8)
8583(dni (.sym mov 16 .b.S-Rn-An)
8584 (.str mov ".b:S r0[lh],src2")
8585 ((machine 16))
8586 (.str mov ".b$S ${Dst16RnQI-S},${src16-2-S}")
8587 (+ (f-0-4 #x0) (f-4-1 0) Dst16RnQI-S src16-2-S)
8588 (mov-sem QI src16-2-S Dst16RnQI-S)
8589 ())
8590
8591; mov.B.S src2,r0l/r0h (m16 #9)
8592(binary-arith16-b-S-src2 mov (f-0-4 0) (f-4-1 1) mov-sem)
8593
8594; mov.BW:S src2,r0l/r0 (m32 #9)
8595; mov.BW:S src2,r1l/r1 (m32 #10)
8596(define-pmacro (mov32-src-r sz szcode mode src dst opc1 opc2)
8597 (begin
8598 (dni (.sym mov32. sz - src - dst)
8599 (.str "mov." sz "src," dst)
8600 ((machine 32))
8601 (.str "mov." sz "$S ${" (.sym src - mode) "}," dst)
8602 (+ (f-0-2 opc1) (.sym src - mode) (f-4-3 opc2) (f-7-1 szcode))
8603 (mov-sem mode (.sym src - mode) (reg (.sym h- dst)))
8604 ())
8605 )
8606 )
8607(mov32-src-r b 0 QI dst32-2-S-16 r0l 0 4)
8608(mov32-src-r w 1 HI dst32-2-S-16 r0 0 4)
8609(mov32-src-r b 0 QI dst32-2-S-8 r0l 0 4)
8610(mov32-src-r w 1 HI dst32-2-S-8 r0 0 4)
8611(mov32-src-r b 0 QI dst32-2-S-basic r1l 1 7)
8612(mov32-src-r w 1 HI dst32-2-S-basic r1l 1 7)
8613(mov32-src-r b 0 QI dst32-2-S-16 r1l 1 7)
8614(mov32-src-r w 1 HI dst32-2-S-16 r1 1 7)
8615(mov32-src-r b 0 QI dst32-2-S-8 r1l 1 7)
8616(mov32-src-r w 1 HI dst32-2-S-8 r1 1 7)
8617
8618; mov.BW:S r0l/r0,dst2 (m32 #11)
8619(define-pmacro (mov32-r-dest sz szcode mode src dst opc1 opc2)
8620 (begin
8621 (dni (.sym mov32. sz - src - dst)
8622 (.str "mov." sz "src," dst)
8623 ((machine 32))
8624 (.str "mov." sz "$S " src ",${" (.sym dst - mode) "}")
8625 (+ (f-0-2 opc1) (.sym dst - mode) (f-4-3 opc2) (f-7-1 szcode))
8626 (mov-sem mode (reg (.sym h- src)) (.sym dst - mode))
8627 ())
8628 )
8629 )
8630(mov32-r-dest b 0 QI r0l dst32-2-S-16 0 0)
8631(mov32-r-dest w 1 HI r0 dst32-2-S-16 0 0)
8632(mov32-r-dest b 0 QI r0l dst32-2-S-8 0 0)
8633(mov32-r-dest w 1 HI r0 dst32-2-S-8 0 0)
8634
8635; mov.L:S src,A0/A1 (m32 #12)
8636(define-pmacro (mov32-src-a src dst dstcode opc1 opc2)
8637 (begin
8638 (dni (.sym mov32. sz - src - dst)
8639 (.str "mov." sz "src," dst)
8640 ((machine 32))
8641 (.str "mov.l" "$S ${" (.sym src - SI) "}," dst)
8642 (+ (f-0-2 opc1) (.sym src - SI) (f-4-3 opc2) (f-7-1 dstcode))
8643 (mov-sem SI (.sym src - SI) (reg (.sym h- dst)))
8644 ())
8645 )
8646 )
8647(mov32-src-a dst32-2-S-16 a0 0 1 4)
8648(mov32-src-a dst32-2-S-16 a1 1 1 4)
8649(mov32-src-a dst32-2-S-8 a0 0 1 4)
8650(mov32-src-a dst32-2-S-8 a1 1 1 4)
8651
8652; mov.BW:G dsp8[sp],dst (m16 #10 m32 #13)
8653; mov.BW:G src,dsp8[sp] (m16 #11 m32 #14)
8654(mov-dspsp-dst mov (f-0-4 #x7) (f-4-3 2) (f-8-4 #xB) #xB #x0 #xF mov-dspsp-dst-sem)
8655(mov-src-dspsp mov (f-0-4 #x7) (f-4-3 2) (f-8-4 #x3) #xA #x0 #xF mov-src-dspsp-sem)
8656
8657;-------------------------------------------------------------
8658; mova - move effective address
8659;-------------------------------------------------------------
8660
8661(define-pmacro (mov16a-defn dst dstop dstcode)
8662 (dni (.sym mova16. src - dst)
8663 (.str "mova src," dst)
8664 ((machine 16))
8665 (.str "mova ${dst16-16-Mova-HI}," dst)
8666 (+ (f-0-4 #xE) (f-4-4 #xB) dst16-16-Mova-HI (f-8-4 dstcode))
8667 (sequence () (set HI (reg dstop) dst16-16-Mova-HI))
8668 ())
8669)
8670(mov16a-defn r0 h-r0 0)
8671(mov16a-defn r1 h-r1 1)
8672(mov16a-defn r2 h-r2 2)
8673(mov16a-defn r3 h-r3 3)
8674(mov16a-defn a0 h-a0 4)
8675(mov16a-defn a1 h-a1 5)
8676
8677(define-pmacro (mov32a-defn dst dstop dstcode)
8678 (dni (.sym mova32. src - dst)
8679 (.str "mova src," dst)
8680 ((machine 32))
8681 (.str "mova ${dst32-16-Unprefixed-Mova-SI}," dst)
8682 (+ (f-0-4 #xD) dst32-16-Unprefixed-Mova-SI (f-7-1 1) (f-10-2 1) (f-12-1 1) (f-13-3 dstcode))
8683 (sequence () (set SI (reg dstop) dst32-16-Unprefixed-Mova-SI))
8684 ())
8685)
8686(mov32a-defn r2r0 h-r2r0 0)
8687(mov32a-defn r3r1 h-r3r1 1)
8688(mov32a-defn a0 h-a0 2)
8689(mov32a-defn a1 h-a1 3)
8690
8691;-------------------------------------------------------------
8692; movDir - move nibble
8693;-------------------------------------------------------------
8694
8695(define-pmacro (movdir-sem nib src dst)
8696 (sequence ((SI tmp))
8697 (case DFLT nib
8698 ((0) (set dst (or (and dst #xf0) (and src #xf))))
8699 ((1) (set dst (or (and dst #x0f) (sll (and src #xf) 4))))
8700 ((2) (set dst (or (and dst #xf0) (srl (and src #xf0) 4))))
8701 ((3) (set dst (or (and dst #x0f) (and src #xf0))))
8702 )
8703 )
8704 )
8705; movDir src,dst
8706(define-pmacro (mov16dir-1-defn nib dircode dir)
8707 (dni (.sym mov nib 16 ".r0l-dst")
8708 (.str "mov" nib " r0l,dst")
8709 ((machine 16))
8710 (.str "mov" nib " r0l,${dst16-16-QI}")
8711 (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 dir) dst16-16-QI)
8712 (movdir-sem dircode (reg h-r0l) dst16-16-QI)
8713 ())
8714)
8715(mov16dir-1-defn ll 0 8)
8716(mov16dir-1-defn lh 1 #xA)
8717(mov16dir-1-defn hl 2 9)
8718(mov16dir-1-defn hh 3 #xB)
8719(define-pmacro (mov16dir-2-defn nib dircode dir)
8720 (dni (.sym mov nib 16 ".src-r0l")
8721 (.str "mov" nib " src,r0l")
8722 ((machine 16))
8723 (.str "mov" nib " ${dst16-16-QI},r0l")
8724 (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 dir) dst16-16-QI)
8725 (movdir-sem dircode dst16-16-QI (reg h-r0l))
8726 ())
8727)
8728(mov16dir-2-defn ll 0 0)
8729(mov16dir-2-defn lh 1 2)
8730(mov16dir-2-defn hl 2 1)
8731(mov16dir-2-defn hh 3 3)
8732
8733(define-pmacro (mov32dir-1-defn nib o1o0)
8734 (dni (.sym mov nib 32 ".r0l-dst")
8735 (.str "mov" nib " r0l,dst")
8736 ((machine 32))
8737 (.str "mov" nib " r0l,${dst32-24-Prefixed-QI}")
8738 (+ (f-0-4 #x0) (f-4-4 #x1) (f-8-4 #xB) dst32-24-Prefixed-QI (f-15-1 0) (f-18-2 o1o0) (f-20-4 #xE))
8739 (movdir-sem o1o0 (reg h-r0l) dst32-24-Prefixed-QI)
8740 ())
8741)
8742(mov32dir-1-defn ll 0)
8743(mov32dir-1-defn lh 1)
8744(mov32dir-1-defn hl 2)
8745(mov32dir-1-defn hh 3)
8746(define-pmacro (mov32dir-2-defn nib o1o0)
8747 (dni (.sym mov nib 32 ".src-r0l")
8748 (.str "mov" nib " src,r0l")
8749 ((machine 32))
8750 (.str "mov" nib " ${dst32-24-Prefixed-QI},r0l")
8751 (+ (f-0-4 #x0) (f-4-4 #x1) (f-8-4 #xA) dst32-24-Prefixed-QI (f-15-1 0) (f-18-2 o1o0) (f-20-4 #xE))
8752 (movdir-sem o1o0 dst32-24-Prefixed-QI (reg h-r0l))
8753 ())
8754)
8755(mov32dir-2-defn ll 0)
8756(mov32dir-2-defn lh 1)
8757(mov32dir-2-defn hl 2)
8758(mov32dir-2-defn hh 3)
8759
8760;-------------------------------------------------------------
8761; movx - move extend sign (m32)
8762;-------------------------------------------------------------
8763
8764(define-pmacro (movx-sem mode src dst)
8765 (sequence ((SI source) (SI result))
8766 (set SI result src)
8767 (set-z-and-s result)
8768 (set dst result))
8769)
8770
8771; movx #imm,dst
8772(binary-arith32-imm-dst-defn QI SI "" 0 movx X #xB #x1 #x1 movx-sem)
8773
8774;-------------------------------------------------------------
8775; mul - multiply
8776;-------------------------------------------------------------
8777
8778(define-pmacro (mul-sem mode src1 dst)
8779 (sequence ((mode result))
8780 (set obit (add-oflag mode src1 dst 0))
8781 (set result (mul mode src1 dst))
8782 (set dst result))
8783)
8784
8785; mul.BW #imm,dst
8786(binary-arith-imm-dst mul G (f-0-4 7) (f-4-3 6) (f-8-4 5) #x8 #x1 #xF mul-sem)
8787; mul.BW src,dst
8788(binary-arith-src-dst mul G (f-0-4 #x7) (f-4-3 4) #x1 #xC mul-sem)
8789
8790;-------------------------------------------------------------
8791; mulex - multiple extend sign (m32)
8792;-------------------------------------------------------------
8793
8794; mulex src,dst
8795; (dni mulex-absolute-indirect "mulex [src]" ((machine 32))
8796; ("mulex ${dst32-24-absolute-indirect-HI}")
8797; (+ (f-0-4 0) (f-4-4 9) (f-8-4 #xC) dst32-24-absolute-indirect-HI (f-15-1 1) (f-18-2 3) (f-20-4 #xE))
8798; (set R1R2R0 (mul DI (ext DI R2R0) (ext DI dst32-24-absolute-indirect-HI)))
8799; ())
8800(dni mulex "mulex src" ((machine 32))
8801 ("mulex ${dst32-16-Unprefixed-Mulex-HI}")
8802 (+ (f-0-4 #xC) dst32-16-Unprefixed-Mulex-HI (f-7-1 1) (f-10-2 3) (f-12-4 #xE))
8803 (set R1R2R0 (mul DI (ext DI R2R0) (ext DI dst32-16-Unprefixed-Mulex-HI)))
8804 ())
8805; (dni mulex-indirect "mulex [src]" ((machine 32))
8806; ("mulex ${dst32-24-indirect-HI}")
8807; (+ (f-0-4 0) (f-4-4 9) (f-8-4 #xC) dst32-24-indirect-HI (f-15-1 1) (f-18-2 3) (f-20-4 #xE))
8808; (set R1R2R0 (mul DI (ext DI R2R0) (ext DI dst32-24-indirect-HI)))
8809; ())
8810
8811;-------------------------------------------------------------
8812; mulu - multiply unsigned
8813;-------------------------------------------------------------
8814
8815(define-pmacro (mulu-sem mode src1 dst)
8816 (sequence ((mode result))
8817 (set obit (add-oflag mode src1 dst 0))
8818 (set result (mul mode src1 dst))
8819 (set dst result))
8820)
8821
8822; mulu.BW #imm,dst
8823(binary-arith-imm-dst mulu G (f-0-4 7) (f-4-3 6) (f-8-4 4) #x8 #x0 #xF mulu-sem)
8824; mulu.BW src,dst
8825(binary-arith-src-dst mulu G (f-0-4 #x7) (f-4-3 0) #x1 #x4 mulu-sem)
8826
8827;-------------------------------------------------------------
8828; neg - twos complement
8829;-------------------------------------------------------------
8830
8831(define-pmacro (neg-sem mode dst)
8832 (sequence ((mode result))
8833 (set result (neg mode dst))
8834 (set-z-and-s result)
8835 (set dst result))
8836)
8837
8838; neg.BW:G
8839(unary-insn neg (f-0-4 7) (f-4-3 2) (f-8-4 #x5) #xA #x2 #xF neg-sem)
8840
8841;-------------------------------------------------------------
8842; not - twos complement
8843;-------------------------------------------------------------
8844
8845(define-pmacro (not-sem mode dst)
8846 (sequence ((mode result))
8847 (set result (not mode dst))
8848 (set-z-and-s result)
8849 (set dst result))
8850)
8851
8852; not.BW:G
8853(unary-insn not (f-0-4 7) (f-4-3 2) (f-8-4 #x7) #xA #x1 #xE not-sem)
8854
8855;-------------------------------------------------------------
8856; nop
8857;-------------------------------------------------------------
8858
8859(dni nop16
8860 "nop"
8861 ((machine 16))
8862 "nop"
8863 (+ (f-0-4 #x0) (f-4-4 #x4))
8864 (nop)
8865 ())
8866
8867(dni nop32
8868 "nop"
8869 ((machine 32))
8870 "nop"
8871 (+ (f-0-4 #xD) (f-4-4 #xE))
8872 (nop)
8873 ())
8874
8875;-------------------------------------------------------------
8876; or - logical or
8877;-------------------------------------------------------------
8878
8879(define-pmacro (or-sem mode src1 dst)
8880 (sequence ((mode result))
8881 (set result (or mode src1 dst))
8882 (set-z-and-s result)
8883 (set dst result))
8884)
8885
8886; or.BW #imm,dst (m16 #1 m32 #1)
8887(binary-arith-imm-dst or G (f-0-4 7) (f-4-3 3) (f-8-4 3) #x8 #x2 #xF or-sem)
8888; or.b:S #imm8,dst3 (m16 #2 m32 #2)
8889(binary-arith16-b-S-imm8-dst3 or ".b" (f-0-4 9) (f-4-1 1) or-sem)
8890(binary-arith32-s-imm-dst QI .b 0 or #x1 #x2 or-sem)
8891(binary-arith32-s-imm-dst HI .w 1 or #x1 #x2 or-sem)
8892; or.BW src,dst (m16 #3 m32 #3)
8893(binary-arith-src-dst or G (f-0-4 #x9) (f-4-3 4) #x1 #x5 or-sem)
8894
8895;-------------------------------------------------------------
8896; pop - restore register/memory
8897;-------------------------------------------------------------
8898
8899; TODO future: split this into .b and .w semantics
8900(define-pmacro (pop-sem-mach mach mode dst)
8901 (sequence ((mode b_or_w) (SI length))
8902 (set b_or_w -1)
8903 (set b_or_w (srl b_or_w #x8))
8904 (if (eq b_or_w #x0)
8905 (set length 1) ; .b
8906 (set length 2)) ; .w
8907
8908 (case DFLT length
8909 ((1) (set dst (mem-mach mach QI (reg h-sp))))
8910 ((2) (set dst (mem-mach mach HI (reg h-sp)))))
8911 (set (reg h-sp) (add (reg h-sp) length))
8912 )
8913)
8914
8915(define-pmacro (pop-sem16 mode dest) (pop-sem-mach 16 mode dest))
8916(define-pmacro (pop-sem32 mode dest) (pop-sem-mach 32 mode dest))
8917
8918; pop.BW:G (m16 #1)
8919(unary-insn-mach 16 pop (f-0-4 7) (f-4-3 2) (f-8-4 #xD) pop-sem16)
8920; pop.BW:G (m32 #1)
8921(unary-insn-mach 32 pop #xB #x2 #xF pop-sem32)
8922
8923; pop.b:S r0l/r0h
8924(dni pop16.b-s-rn "pop.b:S r0[lh]" ((machine 16))
8925 "pop.b$S ${Rn16-push-S-anyof}"
8926 (+ (f-0-4 #x9) Rn16-push-S-anyof (f-5-3 #x2))
8927 (pop-sem16 QI Rn16-push-S-anyof)
8928 ())
8929; pop.w:S a0/a1
8930(dni pop16.b-s-an "pop.w:S a[01]" ((machine 16))
8931 "pop.w$S ${An16-push-S-anyof}"
8932 (+ (f-0-4 #xD) An16-push-S-anyof (f-5-3 #x2))
8933 (pop-sem16 HI An16-push-S-anyof)
8934 ())
8935
8936;-------------------------------------------------------------
8937; popc - pop control register
8938; pushc - push control register
8939;-------------------------------------------------------------
8940
8941(define-pmacro (popc32-cr1-sem mode dst)
8942 (sequence ()
8943 (case DFLT dst
8944 ((#x0) (set (reg h-dct0) (mem32 mode (reg h-sp))))
8945 ((#x1) (set (reg h-dct1) (mem32 mode (reg h-sp))))
8946 ((#x2) (sequence ((HI tflag))
8947 (set tflag (mem32 mode (reg h-sp)))
8948 (if (and tflag #x1) (set cbit 1))
8949 (if (and tflag #x2) (set dbit 1))
8950 (if (and tflag #x4) (set zbit 1))
8951 (if (and tflag #x8) (set sbit 1))
8952 (if (and tflag #x10) (set bbit 1))
8953 (if (and tflag #x20) (set obit 1))
8954 (if (and tflag #x40) (set ibit 1))
8955 (if (and tflag #x80) (set ubit 1))))
8956 ((#x3) (set (reg h-svf) (mem32 mode (reg h-sp))))
8957 ((#x4) (set (reg h-drc0) (mem32 mode (reg h-sp))))
8958 ((#x5) (set (reg h-drc1) (mem32 mode (reg h-sp))))
8959 ((#x6) (set (reg h-dmd0) (mem32 mode (reg h-sp))))
8960 ((#x7) (set (reg h-dmd1) (mem32 mode (reg h-sp))))
8961 )
8962 (set (reg h-sp) (add (reg h-sp) 2))
8963 )
8964)
8965(define-pmacro (popc32-cr2-sem mode dst)
8966 (sequence ()
8967 (case DFLT dst
8968 ((#x0) (set (reg h-intb) (mem32 mode (reg h-sp))))
8969 ((#x1) (set (reg h-sp) (mem32 mode (reg h-sp))))
8970 ((#x2) (set (reg h-sb) (mem32 mode (reg h-sp))))
8971 ((#x3) (set (reg h-fb) (mem32 mode (reg h-sp))))
8972 ((#x7) (set (reg h-isp) (mem32 mode (reg h-sp))))
8973 )
8974 (set (reg h-sp) (add (reg h-sp) 4))
8975 )
8976)
8977(define-pmacro (popc16-sem mode dst)
8978 (sequence ()
8979 (case DFLT dst
8980 ((#x1) (set (reg h-intb) (or (and (reg h-intb) #x0000)
8981 (mem16 mode (reg h-sp)))))
8982 ((#x2) (set (reg h-intb) (or (and (reg h-intb) #xffff0000)
8983 (mem16 mode (reg h-sp)))))
8984 ((#x3) (sequence ((HI tflag))
8985 (set tflag (mem16 mode (reg h-sp)))
8986 (if (and tflag #x1) (set cbit 1))
8987 (if (and tflag #x2) (set dbit 1))
8988 (if (and tflag #x4) (set zbit 1))
8989 (if (and tflag #x8) (set sbit 1))
8990 (if (and tflag #x10) (set bbit 1))
8991 (if (and tflag #x20) (set obit 1))
8992 (if (and tflag #x40) (set ibit 1))
8993 (if (and tflag #x80) (set ubit 1))))
8994 ((#x4) (set (reg h-isp) (mem16 mode (reg h-sp))))
8995 ((#x5) (set (reg h-sp) (mem16 mode (reg h-sp))))
8996 ((#x6) (set (reg h-sb) (mem16 mode (reg h-sp))))
8997 ((#x7) (set (reg h-fb) (mem16 mode (reg h-sp))))
8998 )
8999 (set (reg h-sp) (add (reg h-sp) 2))
9000 )
9001)
9002; popc dest (m16c #1)
9003(dni popc16.imm16 "popc dst" ((machine 16))
9004 ("popc ${cr16}")
9005 (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-1 0) (f-12-4 3) cr16)
9006 (popc16-sem HI cr16)
9007 ())
9008; popc dest (m32c #1)
9009(dni popc32.imm16-cr1 "popc dst" ((machine 32))
9010 ("popc ${cr1-Unprefixed-32}")
9011 (+ (f-0-4 #xD) (f-4-4 3) (f-8-4 #xA) (f-12-1 1) cr1-Unprefixed-32)
9012 (popc32-cr1-sem HI cr1-Unprefixed-32)
9013 ())
9014; popc dest (m32c #2)
9015(dni popc32.imm16-cr2 "popc dst" ((machine 32))
9016 ("popc ${cr2-32}")
9017 (+ (f-0-4 #xD) (f-4-4 3) (f-8-4 2) (f-12-1 1) cr2-32)
9018 (popc32-cr2-sem SI cr2-32)
9019 ())
9020
9021(define-pmacro (pushc32-cr1-sem mode dst)
9022 (sequence ()
9023 (set (reg h-sp) (sub (reg h-sp) 2))
9024 (case DFLT dst
9025 ((#x0) (set (mem32 mode (reg h-sp)) (reg h-dct0)))
9026 ((#x1) (set (mem32 mode (reg h-sp)) (reg h-dct1)))
9027 ((#x2) (sequence ((HI tflag))
9028 (set tflag 0)
9029 (if (eq cbit 1) (set tflag (or tflag #x1)))
9030 (if (eq dbit 1) (set tflag (or tflag #x2)))
9031 (if (eq zbit 1) (set tflag (or tflag #x4)))
9032 (if (eq sbit 1) (set tflag (or tflag #x8)))
9033 (if (eq bbit 1) (set tflag (or tflag #x10)))
9034 (if (eq obit 1) (set tflag (or tflag #x20)))
9035 (if (eq ibit 1) (set tflag (or tflag #x40)))
9036 (if (eq ubit 1) (set tflag (or tflag #x80)))
9037 (set (mem32 mode (reg h-sp)) tflag)))
9038 ((#x3) (set (mem32 mode (reg h-sp)) (reg h-svf)))
9039 ((#x4) (set (mem32 mode (reg h-sp)) (reg h-drc0)))
9040 ((#x5) (set (mem32 mode (reg h-sp)) (reg h-drc1)))
9041 ((#x6) (set (mem32 mode (reg h-sp)) (reg h-dmd0)))
9042 ((#x7) (set (mem32 mode (reg h-sp)) (reg h-dmd1)))
9043 )
9044 )
9045)
9046(define-pmacro (pushc32-cr2-sem mode dst)
9047 (sequence ()
9048 (set (reg h-sp) (sub (reg h-sp) 4))
9049 (case DFLT dst
9050 ((#x0) (set (mem32 mode (reg h-sp)) (reg h-intb)))
9051 ((#x1) (set (mem32 mode (reg h-sp)) (reg h-sp)))
9052 ((#x2) (set (mem32 mode (reg h-sp)) (reg h-sb)))
9053 ((#x3) (set (mem32 mode (reg h-sp)) (reg h-fb)))
9054 ((#x7) (set (mem32 mode (reg h-sp)) (reg h-isp)))
9055 )
9056 )
9057)
9058(define-pmacro (pushc16-sem mode dst)
9059 (sequence ()
9060 (set (reg h-sp) (sub (reg h-sp) 2))
9061 (case DFLT dst
9062 ((#x1) (set (mem16 mode (reg h-sp)) (and (reg h-intb) #xffff)))
9063 ((#x2) (set (mem16 mode (reg h-sp)) (and (reg h-intb) #xffff0000)))
9064 ((#x3) (sequence ((HI tflag))
9065 (if (eq cbit 1) (set tflag (or tflag #x1)))
9066 (if (eq dbit 1) (set tflag (or tflag #x2)))
9067 (if (eq zbit 1) (set tflag (or tflag #x4)))
9068 (if (eq sbit 1) (set tflag (or tflag #x8)))
9069 (if (eq bbit 1) (set tflag (or tflag #x10)))
9070 (if (eq obit 1) (set tflag (or tflag #x20)))
9071 (if (eq ibit 1) (set tflag (or tflag #x40)))
9072 (if (eq ubit 1) (set tflag (or tflag #x80)))
9073 (set (mem16 mode (reg h-sp)) tflag)))
9074
9075 ((#x4) (set (mem16 mode (reg h-sp)) (reg h-isp)))
9076 ((#x5) (set (mem16 mode (reg h-sp)) (reg h-sp)))
9077 ((#x6) (set (mem16 mode (reg h-sp)) (reg h-sb)))
9078 ((#x7) (set (mem16 mode (reg h-sp)) (reg h-fb)))
9079 )
9080 )
9081)
9082; pushc src (m16c)
9083(dni pushc16.imm16 "pushc dst" ((machine 16))
9084 ("pushc ${cr16}")
9085 (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-1 0) (f-12-4 2) cr16)
9086 (pushc16-sem HI cr16)
9087 ())
9088; pushc src (m32c #1)
9089(dni pushc32.imm16-cr1 "pushc dst" ((machine 32))
9090 ("pushc ${cr1-Unprefixed-32}")
9091 (+ (f-0-4 #xD) (f-4-4 1) (f-8-4 #xA) (f-12-1 1) cr1-Unprefixed-32)
9092 (pushc32-cr1-sem HI cr1-Unprefixed-32)
9093 ())
9094; pushc src (m32c #2)
9095(dni pushc32.imm16-cr2 "pushc dst" ((machine 32))
9096 ("pushc ${cr2-32}")
9097 (+ (f-0-4 #xD) (f-4-4 1) (f-8-4 2) (f-12-1 1) cr2-32)
9098 (pushc32-cr2-sem SI cr2-32)
9099 ())
9100
9101;-------------------------------------------------------------
9102; popm - pop multiple
9103; pushm - push multiple
9104;-------------------------------------------------------------
9105
9106(define-pmacro (popm-sem machine dst)
9107 (sequence ((SI addrlen))
9108 (if (eq machine 16)
9109 (set addrlen 2)
9110 (set addrlen 4))
9111 (if (and dst 1)
9112 (sequence () (set R0 (mem-mach machine HI (reg h-sp)))
9113 (set (reg h-sp) (add (reg h-sp) 2))))
9114 (if (and dst 2)
9115 (sequence () (set R1 (mem-mach machine HI (reg h-sp)))
9116 (set (reg h-sp) (add (reg h-sp) 2))))
9117 (if (and dst 4)
9118 (sequence () (set R2 (mem-mach machine HI (reg h-sp)))
9119 (set (reg h-sp) (add (reg h-sp) 2))))
9120 (if (and dst 8)
9121 (sequence () (set R3 (mem-mach machine HI (reg h-sp)))
9122 (set (reg h-sp) (add (reg h-sp) 2))))
9123 (if (and dst 16)
9124 (sequence () (set A0 (mem-mach machine HI (reg h-sp)))
9125 (set (reg h-sp) (add (reg h-sp) addrlen))))
9126 (if (and dst 32)
9127 (sequence () (set A1 (mem-mach machine HI (reg h-sp)))
9128 (set (reg h-sp) (add (reg h-sp) addrlen))))
9129 (if (and dst 64)
9130 (sequence () (set (reg h-sb) (mem-mach machine HI (reg h-sp)))
9131 (set (reg h-sp) (add (reg h-sp) addrlen))))
9132 (if (eq dst 128)
9133 (sequence () (set (reg h-fb) (mem-mach machine HI (reg h-sp)))
9134 (set (reg h-sp) (add (reg h-sp) addrlen))))
9135 )
9136)
9137
9138(define-pmacro (pushm-sem machine dst)
9139 (sequence ((SI count) (SI addrlen))
9140 (if (eq machine 16)
9141 (set addrlen 2)
9142 (set addrlen 4))
9143 (if (eq dst 1)
9144 (sequence () (set (reg h-sp) (sub (reg h-sp) addrlen))
9145 (set (mem-mach machine HI (reg h-sp)) (reg h-fb))))
9146 (if (and dst 2)
9147 (sequence () (set (reg h-sp) (sub (reg h-sp) addrlen))
9148 (set (mem-mach machine HI (reg h-sp)) (reg h-sb))))
9149 (if (and dst 4)
9150 (sequence () (set (reg h-sp) (sub (reg h-sp) addrlen))
9151 (set (mem-mach machine HI (reg h-sp)) A1)))
9152 (if (and dst 8)
9153 (sequence () (set (reg h-sp) (sub (reg h-sp) addrlen))
9154 (set (mem-mach machine HI (reg h-sp)) A0)))
9155 (if (and dst 16)
9156 (sequence () (set (reg h-sp) (sub (reg h-sp) 2))
9157 (set (mem-mach machine HI (reg h-sp)) R3)))
9158 (if (and dst 32)
9159 (sequence () (set (reg h-sp) (sub (reg h-sp) 2))
9160 (set (mem-mach machine HI (reg h-sp)) R2)))
9161 (if (and dst 64)
9162 (sequence () (set (reg h-sp) (sub (reg h-sp) 2))
9163 (set (mem-mach machine HI (reg h-sp)) R1)))
9164 (if (and dst 128)
9165 (sequence () (set (reg h-sp) (sub (reg h-sp) 2))
9166 (set (mem-mach machine HI (reg h-sp)) R0)))
9167 )
9168)
9169
9170(dni popm16 "popm regs" ((machine 16))
9171 ("popm ${Regsetpop}")
9172 (+ (f-0-4 #xE) (f-4-4 #xD) Regsetpop)
9173 (popm-sem 16 Regsetpop)
9174 ())
9175(dni pushm16 "pushm regs" ((machine 16))
9176 ("pushm ${Regsetpush}")
9177 (+ (f-0-4 #xE) (f-4-4 #xC) Regsetpush)
9178 (pushm-sem 16 Regsetpush)
9179 ())
9180(dni popm "popm regs" ((machine 32))
9181 ("popm ${Regsetpop}")
9182 (+ (f-0-4 #x8) (f-4-4 #xE) Regsetpop)
9183 (popm-sem 32 Regsetpop)
9184 ())
9185(dni pushm "pushm regs" ((machine 32))
9186 ("pushm ${Regsetpush}")
9187 (+ (f-0-4 #x8) (f-4-4 #xF) Regsetpush)
9188 (pushm-sem 32 Regsetpush)
9189 ())
9190
9191;-------------------------------------------------------------
9192; push - Save register/memory/immediate data
9193;-------------------------------------------------------------
9194
9195; TODO future: split this into .b and .w semantics
9196(define-pmacro (push-sem-mach mach mode dst)
9197 (sequence ((mode b_or_w) (SI length))
9198 (set b_or_w -1)
9199 (set b_or_w (srl b_or_w #x8))
9200 (if (eq b_or_w #x0)
9201 (set length 1) ; .b
9202 (if (eq b_or_w #xff)
9203 (set length 2) ; .w
9204 (set length 4))) ; .l
9205 (set (reg h-sp) (sub (reg h-sp) length))
9206 (case DFLT length
9207 ((1) (set (mem-mach mach QI (reg h-sp)) dst))
9208 ((2) (set (mem-mach mach HI (reg h-sp)) dst))
9209 ((4) (set (mem-mach mach SI (reg h-sp)) dst)))
9210 )
9211 )
9212
9213(define-pmacro (push-sem16 mode dst) (push-sem-mach 16 mode dst))
9214(define-pmacro (push-sem32 mode dst) (push-sem-mach 32 mode dst))
9215
9216; push.BW:G imm (m16 #1 m32 #1)
9217(dni push16.b.G-imm "push.b:G #Imm-16-QI" ((machine 16))
9218 ("push.b$G #${Imm-16-QI}")
9219 (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xE) (f-12-4 2) Imm-16-QI)
9220 (push-sem16 QI Imm-16-QI)
9221 ())
9222
9223(dni push16.w.G-imm "push.w:G #Imm-16-HI" ((machine 16))
9224 ("push.w$G #${Imm-16-HI}")
9225 (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xE) (f-12-4 2) Imm-16-HI)
9226 (push-sem16 HI Imm-16-HI)
9227 ())
9228
9229(dni push32.b.imm "push.w #Imm-8-QI" ((machine 32))
9230 ("push.b #Imm-8-QI")
9231 (+ (f-0-4 #xA) (f-4-4 #xE) Imm-8-QI)
9232 (push-sem32 QI Imm-8-QI)
9233 ())
9234
9235(dni push32.w.imm "push.w #Imm-8-HI" ((machine 32))
9236 ("push.w #${Imm-8-HI}")
9237 (+ (f-0-4 #xA) (f-4-4 #xF) Imm-8-HI)
9238 (push-sem32 HI Imm-8-HI)
9239 ())
9240
9241; push.BW:G src (m16 #2)
9242(unary-insn-mach 16 push (f-0-4 7) (f-4-3 2) (f-8-4 #x4) push-sem16)
9243; push.BW:G src (m32 #2)
9244(unary-insn-mach 32 push #xC #x0 #xE push-sem32)
9245
9246
9247; push.b:S r0l/r0h (m16 #3)
9248(dni push16.b-s-rn "push.b:S r0[lh]" ((machine 16))
9249 "push.b$S ${Rn16-push-S-anyof}"
9250 (+ (f-0-4 #x8) Rn16-push-S-anyof (f-5-3 #x2))
9251 (push-sem16 QI Rn16-push-S-anyof)
9252 ())
9253; push.w:S a0/a1 (m16 #4)
9254(dni push16.b-s-an "push.w:S a[01]" ((machine 16))
9255 "push.w$S ${An16-push-S-anyof}"
9256 (+ (f-0-4 #xC) An16-push-S-anyof (f-5-3 #x2))
9257 (push-sem16 HI An16-push-S-anyof)
9258 ())
9259
9260; push.l imm32 (m32 #3)
9261(dni push32.l.imm "push.l #Imm-16-SI" ((machine 32))
9262 ("push.l #${Imm-16-SI}")
9263 (+ (f-0-4 #xB) (f-4-4 6) (f-8-4 5) (f-12-4 3) Imm-16-SI)
9264 (push-sem32 SI Imm-16-SI)
9265 ())
9266; push.l src (m32 #4)
9267(unary-insn-defn 32 16-Unprefixed SI .l push (+ (f-0-4 #xA) (f-7-1 0) dst32-16-Unprefixed-SI (f-10-2 0) (f-12-4 1)) push-sem32)
9268
9269;-------------------------------------------------------------
9270; pusha - push effective address
9271;------------------------------------------------------------
9272
9273(define-pmacro (push16a-sem mode dst)
9274 (sequence ()
9275 (set (reg h-sp) (sub (reg h-sp) 2))
9276 (set (mem16 HI (reg h-sp)) dst))
9277)
9278(define-pmacro (push32a-sem mode dst)
9279 (sequence ()
9280 (set (reg h-sp) (sub (reg h-sp) 4))
9281 (set (mem32 SI (reg h-sp)) dst))
9282)
9283(unary-insn-defn 16 16-Mova HI "" pusha (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 9) dst16-16-Mova-HI) push16a-sem)
9284(unary-insn-defn 32 16-Unprefixed-Mova SI "" pusha (+ (f-0-4 #xB) (f-7-1 0) dst32-16-Unprefixed-Mova-SI (f-10-2 0) (f-12-4 1)) push32a-sem)
9285
9286;-------------------------------------------------------------
9287; reit - return from interrupt
9288;-------------------------------------------------------------
9289
9290; ??? semantics
9291(dni reit16 "REIT" ((machine 16))
9292 ("reit")
9293 (+ (f-0-4 #xF) (f-4-4 #xB))
9294 (nop)
9295 ())
9296(dni reit32 "REIT" ((machine 32))
9297 ("reit")
9298 (+ (f-0-4 9) (f-4-4 #xE))
9299 (nop)
9300 ())
9301
9302;-------------------------------------------------------------
9303; rmpa - repeat multiple and addition
9304;-------------------------------------------------------------
9305
9306; TODO semantics
9307(dni rmpa16.b "rmpa.size" ((machine 16))
9308 ("rmpa.b")
9309 (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xF) (f-12-4 1))
9310 (nop)
9311 ())
9312(dni rmpa16.w "rmpa.size" ((machine 16))
9313 ("rmpa.w")
9314 (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xF) (f-12-4 1))
9315 (nop)
9316 ())
9317(dni rmpa32.b "rmpa.size" ((machine 32))
9318 ("rmpa.b")
9319 (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 4) (f-12-4 3))
9320 (nop)
9321 ())
9322
9323(dni rmpa32.w "rmpa.size" ((machine 32))
9324 ("rmpa.w")
9325 (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 5) (f-12-4 3))
9326 (nop)
9327 ())
9328
9329;-------------------------------------------------------------
9330; rolc - rotate left with carry
9331;-------------------------------------------------------------
9332
9333; TODO check semantics
9334; TODO future: split this into .b and .w semantics
9335(define-pmacro (rolc-sem mode dst)
9336 (sequence ((mode result) (SI ocbit) (mode b_or_w) (USI mask))
9337 (set b_or_w -1)
9338 (set b_or_w (srl b_or_w #x8))
9339 (if (eq b_or_w #x0)
9340 (set mask #x8000) ; .b
9341 (set mask #x80000000)) ; .w
9342 (set ocbit cbit)
9343 (set cbit (and dst mask))
9344 (set result (sll mode dst 1))
9345 (set result (or result ocbit))
9346 (set-z-and-s result)
9347 (set dst result))
9348)
9349; rolc.BW src,dst
9350(unary-insn rolc (f-0-4 7) (f-4-3 3) (f-8-4 #xA) #xB #x2 #xE rolc-sem)
9351
9352;-------------------------------------------------------------
9353; rorc - rotate right with carry
9354;-------------------------------------------------------------
9355
9356; TODO check semantics
9357; TODO future: split this into .b and .w semantics
9358(define-pmacro (rorc-sem mode dst)
9359 (sequence ((mode result) (SI ocbit) (mode b_or_w) (USI mask) (SI shamt))
9360 (set b_or_w -1)
9361 (set b_or_w (srl b_or_w #x8))
9362 (if (eq b_or_w #x0)
9363 (sequence () (set mask #x7fff) (set shamt 15)) ; .b
9364 (sequence () (set mask #x7fffffff) (set shamt 31))) ; .w
9365 (set ocbit cbit)
9366 (set cbit (and dst #x1))
9367 (set result (srl mode dst (const 1)))
9368 (set result (or (and result mask) (sll ocbit shamt)))
9369 (set-z-and-s result)
9370 (set dst result))
9371)
9372; rorc.BW src,dst
9373(unary-insn rorc (f-0-4 7) (f-4-3 3) (f-8-4 #xB) #xA #x2 #xE rorc-sem)
9374
9375;-------------------------------------------------------------
9376; rot - rotate
9377;-------------------------------------------------------------
9378
9379; TODO future: split this into .b and .w semantics
9380(define-pmacro (rot-1-sem mode src1 dst)
9381 (sequence ((mode tmp) (mode b_or_w) (USI mask) (SI shift))
9382 (case DFLT src1
9383 ((#x0) (set shift 1))
9384 ((#x1) (set shift 2))
9385 ((#x2) (set shift 3))
9386 ((#x3) (set shift 4))
9387 ((#x4) (set shift 5))
9388 ((#x5) (set shift 6))
9389 ((#x6) (set shift 7))
9390 ((#x7) (set shift 8))
9391 ((-8) (set shift -1))
9392 ((-7) (set shift -2))
9393 ((-6) (set shift -3))
9394 ((-5) (set shift -4))
9395 ((-4) (set shift -5))
9396 ((-3) (set shift -6))
9397 ((-2) (set shift -7))
9398 ((-1) (set shift -8))
9399 (else (set shift 0))
9400 )
9401 (set b_or_w -1)
9402 (set b_or_w (srl b_or_w #x8))
9403 (if (eq b_or_w #x0)
9404 (set mask #x7fff) ; .b
9405 (set mask #x7fffffff)) ; .w
9406 (set tmp dst)
9407 (if (gt mode shift 0)
9408 (sequence ()
9409 (set tmp (rol mode tmp shift))
9410 (set cbit (and tmp #x1)))
9411 (sequence ()
9412 (set tmp (ror mode tmp (mul shift -1)))
9413 (set cbit (and tmp mask))))
9414 (set-z-and-s tmp)
9415 (set dst tmp))
9416)
9417(define-pmacro (rot-2-sem mode dst)
9418 (sequence ((mode tmp) (mode b_or_w) (USI mask))
9419 (set b_or_w -1)
9420 (set b_or_w (srl b_or_w #x8))
9421 (if (eq b_or_w #x0)
9422 (set mask #x7fff) ; .b
9423 (set mask #x7fffffff)) ; .w
9424 (set tmp dst)
9425 (if (gt mode (reg h-r1h) 0)
9426 (sequence ()
9427 (set tmp (rol mode tmp (reg h-r1h)))
9428 (set cbit (and tmp #x1)))
9429 (sequence ()
9430 (set tmp (ror mode tmp (reg h-r1h)))
9431 (set cbit (and tmp mask))))
9432 (set-z-and-s tmp)
9433 (set dst tmp))
9434)
9435
9436; rot.BW #imm4,dst
9437(binary-arith16-shimm4-dst-defn QI .b 0 0 rot (f-0-4 #xE) (f-4-3 0) rot-1-sem)
9438(binary-arith16-shimm4-dst-defn HI .w 0 1 rot (f-0-4 #xE) (f-4-3 0) rot-1-sem)
9439(binary-arith32-shimm4-dst-defn QI .b 0 0 rot #x7 #x2 rot-1-sem)
9440(binary-arith32-shimm4-dst-defn HI .w 0 1 rot #x7 #x2 rot-1-sem)
9441; rot.BW src,dst
9442
9443(dni rot16.b-dst "rot r1h,dest" ((machine 16))
9444 ("rot.b r1h,${dst16-16-HI}")
9445 (+ (f-0-4 7) (f-4-4 #x4) (f-8-4 #x6) dst16-16-HI)
9446 (rot-2-sem QI dst16-16-HI)
9447 ())
9448(dni rot16.w-dst "rot r1h,dest" ((machine 16))
9449 ("rot.w r1h,${dst16-16-HI}")
9450 (+ (f-0-4 7) (f-4-4 #x5) (f-8-4 #x6) dst16-16-HI)
9451 (rot-2-sem HI dst16-16-HI)
9452 ())
9453
9454(dni rot32.b-dst "rot r1h,dest" ((machine 32))
9455 ("rot.b r1h,${dst32-16-Unprefixed-SI}")
9456 (+ (f-0-4 #xA) dst32-16-Unprefixed-SI (f-7-1 0) (f-10-2 3) (f-12-4 #xF))
9457 (rot-2-sem QI dst32-16-Unprefixed-SI)
9458 ())
9459(dni rot32.w-dst "rot r1h,dest" ((machine 32))
9460 ("rot.w r1h,${dst32-16-Unprefixed-SI}")
9461 (+ (f-0-4 #xA) dst32-16-Unprefixed-SI (f-7-1 1) (f-10-2 3) (f-12-4 #xF))
9462 (rot-2-sem HI dst32-16-Unprefixed-SI)
9463 ())
9464
9465;-------------------------------------------------------------
9466; rts - return from subroutine
9467;-------------------------------------------------------------
9468
9469(define-pmacro (rts16-sem)
9470 (sequence ((SI tpc))
9471 (set tpc (mem16 HI (reg h-sp)))
9472 (set (reg h-sp) (add (reg h-sp) 2))
9473 (set tpc (or tpc (sll (mem16 QI (reg h-sp)) 16)))
9474 (set (reg h-sp) (add (reg h-sp) 1))
9475 (set pc tpc)
9476 )
9477)
9478(define-pmacro (rts32-sem)
9479 (sequence ((SI tpc))
9480 (set tpc (mem32 HI (reg h-sp)))
9481 (set (reg h-sp) (add (reg h-sp) 2))
9482 (set tpc (or tpc (sll (mem32 HI (reg h-sp)) 16)))
9483 (set (reg h-sp) (add (reg h-sp) 2))
9484 (set pc tpc)
9485 )
9486)
9487
9488(dni rts16 "rts" ((machine 16))
9489 ("rts")
9490 (+ (f-0-4 #xF) (f-4-4 3))
9491 (rts16-sem)
9492 ())
9493
9494(dni rts32 "rts" ((machine 32))
9495 ("rts")
9496 (+ (f-0-4 #xD) (f-4-4 #xF))
9497 (rts32-sem)
9498 ())
9499
9500;-------------------------------------------------------------
9501; sbb - subtract with borrow
9502;-------------------------------------------------------------
9503
9504(define-pmacro (sbb-sem mode src dst)
9505 (sequence ((mode result))
9506 (set result (subc mode dst src cbit))
9507 (set obit (add-oflag mode dst src cbit))
9508 (set cbit (add-oflag mode dst src cbit))
9509 (set-z-and-s result)
9510 (set dst result))
9511)
9512
9513; sbb.size:G #imm,dst
9514(binary-arith16-imm-dst-defn QI QI .b 0 sbb X (f-0-4 7) (f-4-3 3) (f-8-4 7) sbb-sem)
9515(binary-arith16-imm-dst-defn HI HI .w 1 sbb X (f-0-4 7) (f-4-3 3) (f-8-4 7) sbb-sem)
9516(binary-arith32-imm-dst-Prefixed QI QI .b 0 sbb X #x9 #x2 #xE sbb-sem)
9517(binary-arith32-imm-dst-Prefixed HI HI .w 1 sbb X #x9 #x2 #xE sbb-sem)
9518
9519; sbb.BW:G src,dst
9520(binary-arith16-src-dst-defn QI QI .b 0 sbb X (f-0-4 #xB) (f-4-3 4) sbb-sem)
9521(binary-arith16-src-dst-defn HI HI .w 1 sbb X (f-0-4 #xB) (f-4-3 4) sbb-sem)
9522(binary-arith32-src-dst-Prefixed QI QI .b 0 sbb X #x1 #x6 sbb-sem)
9523(binary-arith32-src-dst-Prefixed HI HI .w 1 sbb X #x1 #x6 sbb-sem)
9524
9525;-------------------------------------------------------------
9526; sbjnz - subtract then jump on not zero
9527;-------------------------------------------------------------
9528
9529(define-pmacro (sub-jnz-sem mode src dst label)
9530 (sequence ((mode result))
9531 (set result (sub mode dst src))
9532 (set dst result)
9533 (if (ne result 0)
9534 (set pc label)))
9535)
9536
9537; sbjnz.size #imm4,dst,label
9538(arith-jnz-imm4-dst sbjnz (f-0-4 #xF) (f-4-3 4) #xf #x1 sub-jnz-sem)
9539
9540;-------------------------------------------------------------
9541; sccnd - store condition on condition (m32)
9542;-------------------------------------------------------------
9543
9544(define-pmacro (sccnd-sem cnd dst)
9545 (sequence ()
9546 (set dst 0)
9547 (case DFLT cnd
9548 ((#x00) (if (not cbit) (set dst 1))) ;ltu nc
9549 ((#x01) (if (or cbit zbit) (set dst 1))) ;leu
9550 ((#x02) (if (not zbit) (set dst 1))) ;ne nz
9551 ((#x03) (if (not sbit) (set dst 1))) ;pz
9552 ((#x04) (if (not obit) (set dst 1))) ;no
9553 ((#x05) (if (not (or zbit (xor sbit obit))) (set dst 1))) ;gt
9554 ((#x06) (if (xor sbit obit) (set dst 1))) ;ge
9555 ((#x08) (if (trunc BI cbit) (set dst 1))) ;geu c
9556 ((#x09) (if (not (or cbit zbit)) (set dst 1))) ;gtu
9557 ((#x0a) (if (trunc BI zbit) (set dst 1))) ;eq z
9558 ((#x0b) (if (trunc BI sbit) (set dst 1))) ;n
9559 ((#x0c) (if (trunc BI obit) (set dst 1))) ;o
9560 ((#x0d) (if (or zbit (xor sbit obit)) (set dst 1))) ;le
9561 ((#x0e) (if (xor sbit obit) (set dst 1))) ;lt
9562 )
9563 )
9564 )
9565
9566; scCND dst
9567(dni sccnd
9568 "sccnd dst"
9569 ((machine 32))
9570 "sc$sccond32 ${dst32-16-Unprefixed-HI}"
9571 (+ (f-0-4 #xD) dst32-16-Unprefixed-HI (f-7-1 1) (f-10-2 3) sccond32)
9572 (sccnd-sem sccond32 dst32-16-Unprefixed-HI)
9573 ())
9574
9575;-------------------------------------------------------------
9576; scmpu - string compare unequal (m32)
9577;-------------------------------------------------------------
9578
9579; TODO semantics
9580(dni scmpu.b "scmpu.b" ((machine 32))
9581 ("scmpu.b")
9582 (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 #xC) (f-12-4 3))
9583 (c-call VOID "scmpu_QI_semantics")
9584 ())
9585
9586(dni scmpu.w "scmpu.w" ((machine 32))
9587 ("scmpu.w")
9588 (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 #xD) (f-12-4 3))
9589 (c-call VOID "scmpu_HI_semantics")
9590 ())
9591
9592;-------------------------------------------------------------
9593; sha - shift arithmetic
9594;-------------------------------------------------------------
9595
9596; TODO future: split this into .b and .w semantics
9597(define-pmacro (sha-sem mode src1 dst)
9598 (sequence ((mode result)(mode shift)(mode shmode))
9599 (case DFLT src1
9600 ((#x0) (set shift 1))
9601 ((#x1) (set shift 2))
9602 ((#x2) (set shift 3))
9603 ((#x3) (set shift 4))
9604 ((#x4) (set shift 5))
9605 ((#x5) (set shift 6))
9606 ((#x6) (set shift 7))
9607 ((#x7) (set shift 8))
9608 ((-8) (set shift -1))
9609 ((-7) (set shift -2))
9610 ((-6) (set shift -3))
9611 ((-5) (set shift -4))
9612 ((-4) (set shift -5))
9613 ((-3) (set shift -6))
9614 ((-2) (set shift -7))
9615 ((-1) (set shift -8))
9616 (else (set shift 0))
9617 )
9618 (set shmode -1)
9619 (set shmode (srl shmode #x8))
9620 (if (lt mode shift #x0) (set result (sra mode dst (mul shift -1))))
9621 (if (gt mode shift 0) (set result (sll mode dst shift)))
9622 (if (eq shmode #x0) ; QI
9623 (sequence
9624 ((mode cbitamt))
9625 (if (lt mode shift #x0)
9626 (set cbitamt (sub #x8 shift)) ; sra
9627 (set cbitamt (sub shift 1))) ; sll
9628 (set cbit (srl (and (sll dst cbitamt) #x80) #x7))
9629 (set obit (ne (and dst #x80) (and result #x80)))
9630 ))
9631 (if (eq shmode #xff) ; HI
9632 (sequence
9633 ((mode cbitamt))
9634 (if (lt mode shift #x0)
9635 (set cbitamt (sub 16 shift)) ; sra
9636 (set cbitamt (sub shift 1))) ; sll
9637 (set cbit (srl (and (sll dst cbitamt) #x8000) #xf))
9638 (set obit (ne (and dst #x8000) (and result #x8000)))
9639 ))
9640 (set-z-and-s result)
9641 (set dst result))
9642)
9643(define-pmacro (shar1h-sem mode dst)
9644 (sequence ((mode result)(mode shmode))
9645 (set shmode -1)
9646 (set shmode (srl shmode #x8))
9647 (if (lt mode (reg h-r1h) 0) (set result (sra mode dst (reg h-r1h))))
9648 (if (gt mode (reg h-r1h) 0) (set result (sll mode dst (reg h-r1h))))
9649 (if (eq shmode #x0) ; QI
9650 (sequence
9651 ((mode cbitamt))
9652 (if (lt mode (reg h-r1h) #x0)
9653 (set cbitamt (sub #x8 (reg h-r1h))) ; sra
9654 (set cbitamt (sub (reg h-r1h) 1))) ; sll
9655 (set cbit (srl (and (sll dst cbitamt) #x80) #x7))
9656 (set obit (ne (and dst #x80) (and result #x80)))
9657 ))
9658 (if (eq shmode #xff) ; HI
9659 (sequence
9660 ((mode cbitamt))
9661 (if (lt mode (reg h-r1h) #x0)
9662 (set cbitamt (sub 16 (reg h-r1h))) ; sra
9663 (set cbitamt (sub (reg h-r1h) 1))) ; sll
9664 (set cbit (srl (and (sll dst cbitamt) #x8000) #xf))
9665 (set obit (ne (and dst #x8000) (and result #x8000)))
9666 ))
9667 (set-z-and-s result)
9668 (set dst result))
9669)
9670; sha.BW #imm4,dst (m16 #1 m32 #1)
9671(binary-arith16-shimm4-dst-defn QI .b 0 0 sha (f-0-4 #xF) (f-4-3 0) sha-sem)
9672(binary-arith16-shimm4-dst-defn HI .w 0 1 sha (f-0-4 #xF) (f-4-3 0) sha-sem)
9673(binary-arith32-shimm4-dst-defn QI .b 1 0 sha #x7 #x0 sha-sem)
9674(binary-arith32-shimm4-dst-defn HI .w 1 1 sha #x7 #x0 sha-sem)
9675; sha.BW r1h,dst (m16 #2 m32 #3)
9676(dni sha16.b-dst "sha.b r1h,dest" ((machine 16))
9677 ("sha.b r1h,${dst16-16-QI}")
9678 (+ (f-0-4 7) (f-4-4 4) (f-8-4 #xF) dst16-16-QI)
9679 (shar1h-sem HI dst16-16-QI)
9680 ())
9681(dni sha16.w-dst "sha.w r1h,dest" ((machine 16))
9682 ("sha.w r1h,${dst16-16-HI}")
9683 (+ (f-0-4 7) (f-4-4 5) (f-8-4 #xF) dst16-16-HI)
9684 (shar1h-sem HI dst16-16-HI)
9685 ())
9686(dni sha32.b-dst "sha.b r1h,dest" ((machine 32))
9687 ("sha.b r1h,${dst32-16-Unprefixed-QI}")
9688 (+ (f-0-4 #xB) dst32-16-Unprefixed-QI (f-7-1 0) (f-10-2 3) (f-12-4 #xE))
9689 (shar1h-sem QI dst32-16-Unprefixed-QI)
9690 ())
9691(dni sha32.w-dst "sha.w r1h,dest" ((machine 32))
9692 ("sha.w r1h,${dst32-16-Unprefixed-HI}")
9693 (+ (f-0-4 #xB) dst32-16-Unprefixed-HI (f-7-1 1) (f-10-2 3) (f-12-4 #xE))
9694 (shar1h-sem HI dst32-16-Unprefixed-HI)
9695 ())
9696; sha.L #imm,dst (m16 #3)
9697(dni sha16-L-imm-r2r0 "sha.L #Imm-sh-12-s4,r2r0" ((machine 16))
9698 "sha.l #${Imm-sh-12-s4},r2r0"
9699 (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 #xA) Imm-sh-12-s4)
9700 (sha-sem SI Imm-sh-12-s4 (reg h-r2r0))
9701 ())
9702(dni sha16-L-imm-r3r1 "sha.L #Imm-sh-12-s4,r3r1" ((machine 16))
9703 "sha.l #${Imm-sh-12-s4},r3r1"
9704 (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 #xB) Imm-sh-12-s4)
9705 (sha-sem SI Imm-sh-12-s4 (reg h-r3r1))
9706 ())
9707; sha.L r1h,dst (m16 #4)
9708(dni sha16-L-r1h-r2r0 "sha.L r1h,r2r0" ((machine 16))
9709 "sha.l r1h,r2r0"
9710 (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 2) (f-12-4 1))
9711 (sha-sem SI (reg h-r1h) (reg h-r2r0))
9712 ())
9713(dni sha16-L-r1h-r3r1 "sha.L r1h,r3r1" ((machine 16))
9714 "sha.l r1h,r3r1"
9715 (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 3) (f-12-4 1))
9716 (sha-sem SI (reg h-r1h) (reg h-r3r1))
9717 ())
9718; sha.L #imm8,dst (m32 #2)
9719(binary-arith32-imm-dst-defn QI SI .l 0 sha X #xA #x2 #x1 sha-sem)
9720; sha.L r1h,dst (m32 #4)
9721(dni sha32.l-dst "sha.l r1h,dest" ((machine 32))
9722 ("sha.l r1h,${dst32-16-Unprefixed-SI}")
9723 (+ (f-0-4 #xC) dst32-16-Unprefixed-SI (f-7-1 0) (f-10-2 1) (f-12-4 1))
9724 (shar1h-sem QI dst32-16-Unprefixed-SI)
9725 ())
9726
9727;-------------------------------------------------------------
9728; shanc - shift arithmetic non carry (m32)
9729;-------------------------------------------------------------
9730
9731; TODO check semantics
9732; shanc.L #imm8,dst
9733(binary-arith32-imm-dst-defn QI SI .l 0 shanc X #xC #x2 #x1 sha-sem)
9734
9735;-------------------------------------------------------------
9736; shl - shift logical
9737;-------------------------------------------------------------
9738
9739; TODO future: split this into .b and .w semantics
9740(define-pmacro (shl-sem mode src1 dst)
9741 (sequence ((mode result)(mode shift)(mode shmode))
9742 (case DFLT src1
9743 ((#x0) (set shift 1))
9744 ((#x1) (set shift 2))
9745 ((#x2) (set shift 3))
9746 ((#x3) (set shift 4))
9747 ((#x4) (set shift 5))
9748 ((#x5) (set shift 6))
9749 ((#x6) (set shift 7))
9750 ((#x7) (set shift 8))
9751 ((-8) (set shift -1))
9752 ((-7) (set shift -2))
9753 ((-6) (set shift -3))
9754 ((-5) (set shift -4))
9755 ((-4) (set shift -5))
9756 ((-3) (set shift -6))
9757 ((-2) (set shift -7))
9758 ((-1) (set shift -8))
9759 (else (set shift 0))
9760 )
9761 (set shmode -1)
9762 (set shmode (srl shmode #x8))
9763 (if (lt mode shift #x0) (set result (srl mode dst (mul shift -1))))
9764 (if (gt mode shift 0) (set result (sll mode dst shift)))
9765 (if (eq shmode #x0) ; QI
9766 (sequence
9767 ((mode cbitamt))
9768 (if (lt mode shift #x0)
9769 (set cbitamt (sub #x8 shift)); srl
9770 (set cbitamt (sub shift 1))) ; sll
9771 (set cbit (srl (and (sll dst cbitamt) #x80) #x7))
9772 (set obit (ne (and dst #x80) (and result #x80)))
9773 ))
9774 (if (eq shmode #xff) ; HI
9775 (sequence
9776 ((mode cbitamt))
9777 (if (lt mode shift #x0)
9778 (set cbitamt (sub 16 shift)) ; srl
9779 (set cbitamt (sub shift 1))) ; sll
9780 (set cbit (srl (and (sll dst cbitamt) #x8000) #xf))
9781 (set obit (ne (and dst #x8000) (and result #x8000)))
9782 ))
9783 (set-z-and-s result)
9784 (set dst result))
9785 )
9786(define-pmacro (shlr1h-sem mode dst)
9787 (sequence ((mode result)(mode shmode))
9788 (set shmode -1)
9789 (set shmode (srl shmode #x8))
9790 (if (lt mode (reg h-r1h) 0) (set result (srl mode dst (reg h-r1h))))
9791 (if (gt mode (reg h-r1h) 0) (set result (sll mode dst (reg h-r1h))))
9792 (if (eq shmode #x0) ; QI
9793 (sequence
9794 ((mode cbitamt))
9795 (if (lt mode (reg h-r1h) #x0)
9796 (set cbitamt (sub #x8 (reg h-r1h))) ; srl
9797 (set cbitamt (sub (reg h-r1h) 1))) ; sll
9798 (set cbit (srl (and (sll dst cbitamt) #x80) #x7))
9799 (set obit (ne (and dst #x80) (and result #x80)))
9800 ))
9801 (if (eq shmode #xff) ; HI
9802 (sequence
9803 ((mode cbitamt))
9804 (if (lt mode (reg h-r1h) #x0)
9805 (set cbitamt (sub 16 (reg h-r1h))) ; srl
9806 (set cbitamt (sub (reg h-r1h) 1))) ; sll
9807 (set cbit (srl (and (sll dst cbitamt) #x8000) #xf))
9808 (set obit (ne (and dst #x8000) (and result #x8000)))
9809 ))
9810 (set-z-and-s result)
9811 (set dst result))
9812 )
9813; shl.BW #imm4,dst (m16 #1 m32 #1)
9814(binary-arith16-shimm4-dst-defn QI .b 0 0 shl (f-0-4 #xE) (f-4-3 4) shl-sem)
9815(binary-arith16-shimm4-dst-defn HI .w 0 1 shl (f-0-4 #xE) (f-4-3 4) shl-sem)
9816(binary-arith32-shimm4-dst-defn QI .b 0 0 shl #x7 #x0 shl-sem)
9817(binary-arith32-shimm4-dst-defn HI .w 0 1 shl #x7 #x0 shl-sem)
9818; shl.BW r1h,dst (m16 #2 m32 #3)
9819(dni shl16.b-dst "shl.b r1h,dest" ((machine 16))
9820 ("shl.b r1h,${dst16-16-QI}")
9821 (+ (f-0-4 7) (f-4-4 4) (f-8-4 #xE) dst16-16-QI)
9822 (shlr1h-sem HI dst16-16-QI)
9823 ())
9824(dni shl16.w-dst "shl.w r1h,dest" ((machine 16))
9825 ("shl.w r1h,${dst16-16-HI}")
9826 (+ (f-0-4 7) (f-4-4 5) (f-8-4 #xE) dst16-16-HI)
9827 (shlr1h-sem HI dst16-16-HI)
9828 ())
9829(dni shl32.b-dst "shl.b r1h,dest" ((machine 32))
9830 ("shl.b r1h,${dst32-16-Unprefixed-QI}")
9831 (+ (f-0-4 #xA) dst32-16-Unprefixed-QI (f-7-1 0) (f-10-2 3) (f-12-4 #xE))
9832 (shlr1h-sem QI dst32-16-Unprefixed-QI)
9833 ())
9834(dni shl32.w-dst "shl.w r1h,dest" ((machine 32))
9835 ("shl.w r1h,${dst32-16-Unprefixed-HI}")
9836 (+ (f-0-4 #xA) dst32-16-Unprefixed-HI (f-7-1 1) (f-10-2 3) (f-12-4 #xE))
9837 (shlr1h-sem HI dst32-16-Unprefixed-HI)
9838 ())
9839; shl.L #imm,dst (m16 #3)
9840(dni shl16-L-imm-r2r0 "shl.L #Imm-sh-12-s4,r2r0" ((machine 16))
9841 "shl.l #${Imm-sh-12-s4},r2r0"
9842 (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 #x8) Imm-sh-12-s4)
9843 (shl-sem SI Imm-sh-12-s4 (reg h-r2r0))
9844 ())
9845(dni shl16-L-imm-r3r1 "shl.L #Imm-sh-12-s4,r3r1" ((machine 16))
9846 "shl.l #${Imm-sh-12-s4},r3r1"
9847 (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 #x9) Imm-sh-12-s4)
9848 (shl-sem SI Imm-sh-12-s4 (reg h-r3r1))
9849 ())
9850; shl.L r1h,dst (m16 #4)
9851(dni shl16-L-r1h-r2r0 "shl.L r1h,r2r0" ((machine 16))
9852 "shl.l r1h,r2r0"
9853 (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 0) (f-12-4 1))
9854 (shl-sem SI (reg h-r1h) (reg h-r2r0))
9855 ())
9856(dni shl16-L-r1h-r3r1 "shl.L r1h,r3r1" ((machine 16))
9857 "shl.l r1h,r3r1"
9858 (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 1) (f-12-4 1))
9859 (shl-sem SI (reg h-r1h) (reg h-r3r1))
9860 ())
9861; shl.L #imm8,dst (m32 #2)
9862(binary-arith32-imm-dst-defn QI SI .l 0 shl X #x9 #x2 #x1 shl-sem)
9863; shl.L r1h,dst (m32 #4)
9864(dni shl32.l-dst "shl.l r1h,dest" ((machine 32))
9865 ("shl.l r1h,${dst32-16-Unprefixed-SI}")
9866 (+ (f-0-4 #xC) dst32-16-Unprefixed-SI (f-7-1 0) (f-10-2 0) (f-12-4 1))
9867 (shlr1h-sem QI dst32-16-Unprefixed-SI)
9868 ())
9869
9870;-------------------------------------------------------------
9871; shlnc - shift logical non carry
9872;-------------------------------------------------------------
9873
9874; TODO check semantics
9875; shlnc.L #imm8,dst
9876(binary-arith32-imm-dst-defn QI SI .l 0 shlnc X #x8 #x2 #x1 shl-sem)
9877
9878;-------------------------------------------------------------
9879; sin - string input (m32)
9880;-------------------------------------------------------------
9881
9882; TODO semantics
9883(dni sin32.b "sin" ((machine 32))
9884 ("sin.b")
9885 (+ (f-0-4 #xB) (f-4-4 2) (f-8-4 8) (f-12-4 3))
9886 (c-call VOID "sin_QI_semantics")
9887 ())
9888
9889(dni sin32.w "sin" ((machine 32))
9890 ("sin.w")
9891 (+ (f-0-4 #xB) (f-4-4 2) (f-8-4 9) (f-12-4 3))
9892 (c-call VOID "sin_HI_semantics")
9893 ())
9894
9895;-------------------------------------------------------------
9896; smovb - string move backward
9897;-------------------------------------------------------------
9898
9899; TODO semantics
9900(dni smovb16.b "smovb.b" ((machine 16))
9901 ("smovb.b")
9902 (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xE) (f-12-4 9))
9903 (c-call VOID "smovb_QI_semantics")
9904 ())
9905
9906(dni smovb16.w "smovb.w" ((machine 16))
9907 ("smovb.w")
9908 (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xE) (f-12-4 9))
9909 (c-call VOID "smovb_HI_semantics")
9910 ())
9911
9912(dni smovb32.b "smovb.b" ((machine 32))
9913 ("smovb.b")
9914 (+ (f-0-4 #xB) (f-4-4 6) (f-8-4 8) (f-12-4 3))
9915 (c-call VOID "smovb_QI_semantics")
9916 ())
9917
9918(dni smovb32.w "smovb.w" ((machine 32))
9919 ("smovb.w")
9920 (+ (f-0-4 #xB) (f-4-4 6) (f-8-4 9) (f-12-4 3))
9921 (c-call VOID "smovb_HI_semantics")
9922 ())
9923
9924;-------------------------------------------------------------
9925; smovf - string move forward (m32)
9926;-------------------------------------------------------------
9927
9928; TODO semantics
9929(dni smovf16.b "smovf.b" ((machine 16))
9930 ("smovf.b")
9931 (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xE) (f-12-4 8))
9932 (c-call VOID "smovf_QI_semantics")
9933 ())
9934
9935(dni smovf16.w "smovf.w" ((machine 16))
9936 ("smovf.w")
9937 (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xE) (f-12-4 8))
9938 (c-call VOID "smovf_HI_semantics")
9939 ())
9940
9941(dni smovf32.b "smovf.b" ((machine 32))
9942 ("smovf.b")
9943 (+ (f-0-4 #xB) (f-4-4 0) (f-8-4 8) (f-12-4 3))
9944 (c-call VOID "smovf_QI_semantics")
9945 ())
9946
9947(dni smovf32.w "smovf.w" ((machine 32))
9948 ("smovf.w")
9949 (+ (f-0-4 #xB) (f-4-4 0) (f-8-4 9) (f-12-4 3))
9950 (c-call VOID "smovf_HI_semantics")
9951 ())
9952
9953;-------------------------------------------------------------
9954; smovu - string move unequal (m32)
9955;-------------------------------------------------------------
9956
9957; TODO semantics
9958(dni smovu.b "smovu.b" ((machine 32))
9959 ("smovu.b")
9960 (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 8) (f-12-4 3))
9961 (c-call VOID "smovu_QI_semantics")
9962 ())
9963
9964(dni smovu.w "smovu.w" ((machine 32))
9965 ("smovu.w")
9966 (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 9) (f-12-4 3))
9967 (c-call VOID "smovu_HI_semantics")
9968 ())
9969
9970;-------------------------------------------------------------
9971; sout - string output (m32)
9972;-------------------------------------------------------------
9973
9974; TODO semantics
9975(dni sout.b "sout.b" ((machine 32))
9976 ("sout.b")
9977 (+ (f-0-4 #xB) (f-4-4 4) (f-8-4 8) (f-12-4 3))
9978 (c-call VOID "sout_QI_semantics")
9979 ())
9980
9981(dni sout.w "sout" ((machine 32))
9982 ("sout.w")
9983 (+ (f-0-4 #xB) (f-4-4 4) (f-8-4 9) (f-12-4 3))
9984 (c-call VOID "sout_HI_semantics")
9985 ())
9986
9987;-------------------------------------------------------------
9988; sstr - string store
9989;-------------------------------------------------------------
9990
9991; TODO semantics
9992(dni sstr16.b "sstr.b" ((machine 16))
9993 ("sstr.b")
9994 (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xE) (f-12-4 #xA))
9995 (c-call VOID "sstr_QI_semantics")
9996 ())
9997
9998(dni sstr16.w "sstr.w" ((machine 16))
9999 ("sstr.w")
10000 (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xE) (f-12-4 #xA))
10001 (c-call VOID "sstr_HI_semantics")
10002 ())
10003
10004(dni sstr.b "sstr" ((machine 32))
10005 ("sstr.b")
10006 (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 0) (f-12-4 3))
10007 (c-call VOID "sstr_QI_semantics")
10008 ())
10009
10010(dni sstr.w "sstr" ((machine 32))
10011 ("sstr.w")
10012 (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 1) (f-12-4 3))
10013 (c-call VOID "sstr_HI_semantics")
10014 ())
10015
10016;-------------------------------------------------------------
10017; stnz - store on not zero
10018;-------------------------------------------------------------
10019
10020(define-pmacro (stnz-sem mode src dst)
10021 (sequence ()
10022 (if (ne zbit (const 1))
10023 (set dst src)))
10024)
10025; stnz #imm8,dst3 (m16)
10026(binary-arith16-b-S-imm8-dst3 stnz "" (f-0-4 #xD) (f-4-1 0) stnz-sem)
10027; stnz.BW #imm,dst (m32)
10028(binary-arith32-imm-dst-defn QI QI .b 0 stnz X #x9 #x1 #xF stnz-sem)
10029(binary-arith32-imm-dst-defn HI HI .w 1 stnz X #x9 #x1 #xF stnz-sem)
10030
10031;-------------------------------------------------------------
10032; stz - store on zero
10033;-------------------------------------------------------------
10034
10035(define-pmacro (stz-sem mode src dst)
10036 (sequence ()
10037 (if (eq zbit (const 1))
10038 (set dst src)))
10039)
10040; stz #imm8,dst3 (m16)
10041(binary-arith16-b-S-imm8-dst3 stz "" (f-0-4 #xC) (f-4-1 1) stz-sem)
10042; stz.BW #imm,dst (m32)
10043(binary-arith32-imm-dst-defn QI QI .b 0 stz X #x9 #x0 #xF stz-sem)
10044(binary-arith32-imm-dst-defn HI HI .w 1 stz X #x9 #x0 #xF stz-sem)
10045
10046;-------------------------------------------------------------
10047; stzx - store on zero extention
10048;-------------------------------------------------------------
10049
10050(define-pmacro (stzx-sem mode src1 src2 dst)
10051 (sequence ()
10052 (if (eq zbit (const 1))
10053 (set dst src1)
10054 (set dst src2)))
10055 )
10056; stzx #imm8,dst3 (m16)
10057(dni stzx16-imm8-imm8-r0h "stzx #Imm8,#Imm8,r0h" ((machine 16))
10058 ("stzx #${Imm-8-QI},#${Imm-16-QI},r0h")
10059 (+ (f-0-4 #xD) (f-4-4 #xB) Imm-8-QI Imm-16-QI)
10060 (stzx-sem QI Imm-8-QI Imm-16-QI (reg h-r0h))
10061 ())
10062(dni stzx16-imm8-imm8-r0l "stzx #Imm8,#Imm8,r0l" ((machine 16))
10063 ("stzx #${Imm-8-QI},#${Imm-16-QI},r0l")
10064 (+ (f-0-4 #xD) (f-4-4 #xC) Imm-8-QI Imm-16-QI)
10065 (stzx-sem QI Imm-8-QI Imm-16-QI (reg h-r0l))
10066 ())
10067(dni stzx16-imm8-imm8-dsp8sb "stzx #Imm8,#Imm8,dsp8[sb]" ((machine 16))
10068 ("stzx #${Imm-8-QI},#${Imm-16-QI},Dsp-24-u8[sb]")
10069 (+ (f-0-4 #xD) (f-4-4 #xD) Imm-8-QI Dsp-16-u8 Imm-24-QI)
10070 (stzx-sem QI Imm-8-QI Imm-16-QI (mem16 QI (add (reg h-sb) Dsp-24-u8)))
10071 ())
10072(dni stzx16-imm8-imm8-dsp8fb "stzx #Imm8,#Imm8,dsp8[fb]" ((machine 16))
10073 ("stzx #${Imm-8-QI},#${Imm-16-QI},Dsp-24-u8[fb]")
10074 (+ (f-0-4 #xD) (f-4-4 #xE) Imm-8-QI Dsp-16-u8 Imm-24-QI)
10075 (stzx-sem QI Imm-8-QI Imm-16-QI (mem16 QI (add (reg h-fb) Dsp-24-u8)))
10076 ())
10077(dni stzx16-imm8-imm8-abs16 "stzx #Imm8,#Imm8,abs16" ((machine 16))
10078 ("stzx #${Imm-8-QI},#${Imm-16-QI},Dsp-24-u16")
10079 (+ (f-0-4 #xD) (f-4-4 #xE) Imm-8-QI Dsp-16-u16 Imm-32-QI)
10080 (stzx-sem QI Imm-8-QI Imm-32-QI (mem16 QI Dsp-16-u16))
10081 ())
10082; stzx.BW #imm,dst (m32)
10083(insn-imm1-imm2-dst-Unprefixed stzx #x9 #x3 #xF stzx-sem)
10084
10085;-------------------------------------------------------------
10086; subx - subtract extend (m32)
10087;-------------------------------------------------------------
10088
10089(define-pmacro (subx-sem mode src1 dst)
10090 (sequence ((mode result))
10091 (set result (sub mode dst (ext mode src1)))
10092 (set obit (sub-oflag mode dst (ext mode src1) 0))
10093 (set cbit (sub-cflag mode dst (ext mode src1) 0))
10094 (set dst result)
10095 (set-z-and-s result)))
10096; subx #imm8,dst
10097(binary-arith32-imm-dst-defn QI SI "" 0 subx G #x9 #x1 #x1 subx-sem)
10098; subx src,dst
10099(binary-arith32-src-dst-defn QI SI "" 0 subx G #x1 #x0 subx-sem)
10100
10101;-------------------------------------------------------------
10102; tst - test
10103;-------------------------------------------------------------
10104
10105(define-pmacro (tst-sem mode src1 dst)
10106 (sequence ((mode result))
10107 (set result (and mode dst src1))
10108 (set-z-and-s result))
10109)
10110
10111; tst.BW #imm,dst (m16 #1 m32 #1)
10112(binary-arith-imm-dst tst X (f-0-4 7) (f-4-3 3) (f-8-4 0) #x9 #x3 #xE tst-sem)
10113; tst.BW src,dst (m16 #2 m32 #3)
10114(binary-arith16-src-dst-defn QI QI .b 0 tst X (f-0-4 #x8) (f-4-3 0) tst-sem)
10115(binary-arith16-src-dst-defn HI HI .w 1 tst X (f-0-4 #x8) (f-4-3 0) tst-sem)
10116(binary-arith32-src-dst-Prefixed QI QI .b 0 tst X #x1 #x9 tst-sem)
10117(binary-arith32-src-dst-Prefixed HI HI .w 1 tst X #x1 #x9 tst-sem)
10118; tst.BW:S #imm,dst2 (m32 #2)
10119(binary-arith32-s-imm-dst QI .b 0 tst #x0 #x6 tst-sem)
10120(binary-arith32-s-imm-dst HI .w 1 tst #x0 #x6 tst-sem)
10121
10122;-------------------------------------------------------------
10123; und - undefined
10124;-------------------------------------------------------------
10125
10126(dni und16 "und" ((machine 16))
10127 ("und")
10128 (+ (f-0-4 #xF) (f-4-4 #xF))
10129 (nop)
10130 ())
10131
10132(dni und32 "und" ((machine 32))
10133 ("und")
10134 (+ (f-0-4 #xF) (f-4-4 #xF))
10135 (nop)
10136 ())
10137
10138;-------------------------------------------------------------
10139; wait
10140;-------------------------------------------------------------
10141
10142; ??? semantics
10143(dni wait16 "wait" ((machine 16))
10144 ("wait")
10145 (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xF) (f-12-4 3))
10146 (nop)
10147 ())
10148
10149(dni wait "wait" ((machine 32))
10150 ("wait")
10151 (+ (f-0-4 #xB) (f-4-4 2) (f-8-4 0) (f-12-4 3))
10152 (nop)
10153 ())
10154
10155;-------------------------------------------------------------
10156; xchg - exchange
10157;-------------------------------------------------------------
10158
10159(define-pmacro (xchg-sem mode src dst)
10160 (sequence ((mode result))
10161 (set result src)
10162 (set src dst)
10163 (set dst result))
10164 )
10165(define-pmacro (xchg16-defn mode sz szc src srcreg)
10166 (dni (.sym xchg16 sz - srcreg)
10167 (.str "xchg" sz "-" srcreg ",dst16-16-" mode)
10168 ((machine 16))
10169 (.str "xchg." sz " " srcreg ",${dst16-16-" mode "}")
10170 (+ (f-0-4 #x7) (f-4-3 #x5) (f-7-1 szc) (f-8-2 0) (f-10-2 src) (.sym dst16-16- mode))
10171 (xchg-sem mode (reg (.sym h- srcreg)) (.sym dst16-16- mode))
10172 ())
10173)
10174(xchg16-defn QI b 0 0 r0l)
10175(xchg16-defn QI b 0 1 r0h)
10176(xchg16-defn QI b 0 2 r1l)
10177(xchg16-defn QI b 0 3 r1h)
10178(xchg16-defn QI w 1 0 r0)
10179(xchg16-defn HI w 1 1 r1)
10180(xchg16-defn HI w 1 2 r2)
10181(xchg16-defn HI w 1 3 r3)
10182(define-pmacro (xchg32-defn mode sz szc src srcreg)
10183 (dni (.sym xchg32 sz - srcreg)
10184 (.str "xchg" sz "-" srcreg ",dst32-16-Unprefixed-" mode)
10185 ((machine 32))
10186 (.str "xchg." sz " " srcreg ",${dst32-16-Unprefixed-" mode "}")
10187 (+ (f-0-4 #xD) (.sym dst32-16-Unprefixed- mode) (f-7-1 szc) (f-10-2 0) (f-12-1 1) (f-13-3 src))
10188 (xchg-sem mode (reg (.sym h- srcreg)) (.sym dst32-16-Unprefixed- mode))
10189 ())
10190)
10191(xchg32-defn QI b 0 0 r0l)
10192(xchg32-defn QI b 0 1 r1l)
10193(xchg32-defn QI b 0 2 a0)
10194(xchg32-defn QI b 0 3 a1)
10195(xchg32-defn QI b 0 4 r0h)
10196(xchg32-defn QI b 0 5 r1h)
10197(xchg32-defn HI w 1 0 r0)
10198(xchg32-defn HI w 1 1 r1)
10199(xchg32-defn HI w 1 2 a0)
10200(xchg32-defn HI w 1 3 a1)
10201(xchg32-defn HI w 1 4 r2)
10202(xchg32-defn HI w 1 5 r3)
10203
10204;-------------------------------------------------------------
10205; xor - exclusive or
10206;-------------------------------------------------------------
10207
10208(define-pmacro (xor-sem mode src1 dst)
10209 (sequence ((mode result))
10210 (set result (xor mode src1 dst))
10211 (set-z-and-s result)
10212 (set dst result))
10213)
10214
10215; xor.BW #imm,dst (m16 #1 m32 #1)
10216(binary-arith-imm-dst xor G (f-0-4 7) (f-4-3 3) (f-8-4 1) #x9 #x0 #xE xor-sem)
10217; xor.BW src,dst (m16 #3 m32 #3)
10218(binary-arith-src-dst xor G (f-0-4 #x8) (f-4-3 4) #x1 #x9 xor-sem)
10219
10220;-------------------------------------------------------------
10221; Widening
10222;-------------------------------------------------------------
10223
10224(define-pmacro (exts-sem smode dmode src dst)
10225 (set dst (ext dmode (trunc smode src)))
10226)
10227(define-pmacro (extz-sem smode dmode src dst)
10228 (set dst (zext dmode (trunc smode src)))
10229)
10230
10231; exts.b dst for m16c
10232(ext16-defn QI HI .b 0 exts (f-0-4 7) (f-4-3 6) (f-8-4 6) exts-sem)
10233
10234; exts.w r0 for m16c
10235(dni exts16.w-r0
10236 "exts.w r0"
10237 ((machine 16))
10238 "exts.w r0"
10239 (+ (f-0-4 #x7) (f-4-4 #xC) (f-8-4 #xF) (f-12-4 3))
10240 (exts-sem HI SI R0 R2R0)
10241 ())
10242
10243; exts.size dst for m32c
10244(ext32-defn QI HI .b 0 exts (f-0-4 #xC) (f-10-2 1) (f-12-4 #xE) exts-sem)
10245(ext32-defn HI SI .w 1 exts (f-0-4 #xC) (f-10-2 1) (f-12-4 #xE) exts-sem)
10246; exts.b src,dst for m32c
10247(ext32-binary-defn exts .b #x1 #x7 exts-sem)
10248
10249; extz.b src,dst for m32c
10250(ext32-binary-defn extz "" #x1 #xB extz-sem)
10251
10252;-------------------------------------------------------------
10253; Indirect
10254;-------------------------------------------------------------
10255
10256; TODO semantics
10257(dni srcind "SRC-INDIRECT" ((machine 32))
10258 ("src-indirect")
10259 (+ (f-0-4 4) (f-4-4 1))
10260 (set (reg h-src-indirect) 1)
10261 ())
10262
10263(dni destind "DEST-INDIRECT" ((machine 32))
10264 ("dest-indirect")
10265 (+ (f-0-4 0) (f-4-4 9))
10266 (set (reg h-dst-indirect) 1)
10267 ())
10268
10269(dni srcdestind "SRC-DEST-INDIRECT" ((machine 32))
10270 ("src-dest-indirect")
10271 (+ (f-0-4 4) (f-4-4 9))
10272 (sequence () (set (reg h-src-indirect) 1) (set (reg h-dst-indirect) 1))
10273 ())
This page took 0.38466 seconds and 4 git commands to generate.