71 |
this separates
the conditional
instr
72 .macro fp_decode_cond_instr_type
78 | .long
"f<op>",
"fscc/fdbcc"
79 | .long
"fbccw",
"fbccl"
83 |
this separates most move
instr
84 .macro fp_decode_move_instr_type
85 bfextu %
d2{#16,#3},%
d0
90 | .long
"f<op> fpx,fpx",
"invalid instr"
91 | .long
"f<op> <ea>,fpx",
"fmove fpx,<ea>"
92 | .long
"fmovem <ea>,fpcr",
"fmovem <ea>,fpx"
93 | .long
"fmovem fpcr,<ea>",
"fmovem fpx,<ea>"
98 .macro fp_decode_sourcespec
103 .macro fp_decode_dest_format
108 .macro fp_decode_src_reg
109 bfextu %
d2{#22,#3},%
d0
114 .macro fp_decode_addr_mode
115 bfextu %
d2{#10,#3},%
d0
120 | .long
"data register direct",
"addr register direct"
121 | .long
"addr register indirect"
122 | .long
"addr register indirect postincrement"
123 | .long
"addr register indirect predecrement"
124 | .long
"addr register + index16"
125 | .long
"extension mode1",
"extension mode2"
128 | extract
the register for the addressing
mode
129 .macro fp_decode_addr_reg
130 bfextu %
d2{#13,#3},%
d0
134 .macro fp_decode_disp8
140 .macro fp_decode_index
151 debug lea
"'l'.w,%a0"
154 debug lea
"'w'.w,%a0"
157 move.w %
d2,%
d1 | scale factor
160 debug move.l
"%d1,-(%sp)"
163 debug move.l
"(%sp)+,%d1"
168 .macro fp_decode_basedisp
169 bfextu %
d2{#26,#2},%
d0
174 | .long
"reserved",
"null displacement"
175 | .long
"word displacement",
"long displacement"
178 .macro fp_decode_outerdisp
179 bfextu %
d2{#30,#2},%
d0
184 | .long
"no memory indirect action/reserved",
"null outer displacement"
185 | .long
"word outer displacement",
"long outer displacement"
189 .macro fp_get_test_extword
label
190 fp_get_instr_word %
d2,fp_err_ua1
197 .macro fp_test_basereg_d16
label
203 .macro fp_test_basereg_ext
label
208 .macro fp_test_suppr_index
label
215 .macro fp_mode_data_direct
221 .macro fp_mode_addr_indirect
228 .macro fp_test_sp_byte_move
244 | addressing
mode:
address register indirect with postincrement
245 .macro fp_mode_addr_indirect_postinc
257 add.w (fp_datasize,%
d1.w*2),%
a0
263 | addressing
mode:
address register indirect with predecrement
264 .macro fp_mode_addr_indirect_predec
284 sub.w (fp_datasize,%
d1.w*2),%
a0
290 | with 16
bit displacement
291 .macro fp_mode_addr_indirect_disp16
293 fp_test_basereg_d16 1
f
298 1: fp_decode_addr_reg
301 2: fp_get_instr_word %
a1,fp_err_ua1
306 | perform preindex (
if I/
IS == 0
xx and xx != 00)
307 .macro fp_do_preindex
314 getuser.l (%
a1),%
a1,fp_err_ua1,%
a1
320 | perform postindex (
if I/
IS == 1
xx)
321 .macro fp_do_postindex
325 getuser.l (%
a1),%
a1,fp_err_ua1,%
a1
332 .macro fp_mode_addr_indirect_extmode0
334 fp_test_basereg_ext 1
f
339 1: fp_decode_addr_reg
344 fp_get_test_extword 3
f
357 btst #7,%
d2 |
base register suppressed?
371 2: fp_get_instr_word %
a0,fp_err_ua1 | 16
bit base displacement
374 3: fp_get_instr_long %
a0,fp_err_ua1 | 32
bit base displacement
379 fp_test_suppr_index 1
f
393 2: fp_get_instr_word %
a0,fp_err_ua1 | 16
bit outer displacement
396 3: fp_get_instr_long %
a0,fp_err_ua1 | 32
bit outer displacement
406 .macro fp_mode_abs_short
407 fp_get_instr_word %
a0,fp_err_ua1
412 .macro fp_mode_abs_long
413 fp_get_instr_long %
a0,fp_err_ua1