qemu-cr16/target/cr16c/insn.decode
2026-05-04 14:31:19 +02:00

464 lines
33 KiB
Text

%u4_load_s16 52:4 !function=u4_load_s16
%load_u16 !function=load_u16
%addr_abs20 32:20 !function=reloc_abs20
%addr_disp24 32:4 40:4 16:16
### Moves ###
&mov_imm rd imm width
&mov_reg rd rs width
@mov_imm4 .... .... .... rd:4 imm=%u4_load_s16 &mov_imm
@mov_imm32 .... .... .... rd:4 imm:32 &mov_imm
@mov_imm20 .... .... rd:4 imm:20 &mov_imm
@mov_reg .... .... rs:4 rd:4 &mov_reg
@mov_d_xz .... .... rs:4 rd:4
MOV_imm 0101 1000 .... .... @mov_imm4 width=1
MOV_reg 0101 1001 .... .... @mov_reg width=1
MOV_imm 0000 0101 .... .... .... .... .... .... @mov_imm20 width=4
MOV_imm 0000 0000 0111 .... .... .... .... .... .... .... .... .... @mov_imm32 width=4
MOV_imm 0101 0100 .... .... @mov_imm4 width=4
MOVD_reg 0101 0101 .... .... @mov_d_xz
MOV_imm 0101 1010 .... .... @mov_imm4 width=2
MOV_reg 0101 1011 .... .... @mov_reg width=2
MOVXB 0101 1100 .... .... @mov_d_xz
MOVXW 0101 1110 .... .... @mov_d_xz
MOVZB 0101 1101 .... .... @mov_d_xz
MOVZW 0101 1111 .... .... @mov_d_xz
### Integer Arithmetic ###
&arith_imm rd imm add_carry width
&arith_reg rd rs add_carry width
&mul_imm rd imm width
@arith_imm .... .... .... rd:4 imm=%u4_load_s16 &arith_imm
@arith_imm_todo .... .... .... rd:4 imm=%u4_load_s16
@arith_imm20 .... .... rd:4 imm:20
@arith_imm32 .... .... .... rd:4 imm:s32
@arith_reg .... .... rs:4 rd:4 &arith_reg
@addd_rp .... .... rs:4 rd:4
@subd_rp .... .... .... .... .... .... rs:4 rd:4
@mul_imm .... .... .... rd:4 imm=%u4_load_s16 &mul_imm
@mul_reg .... .... rs:4 rd:4
@mac .... .... .... .... .... rd:4 rs1:4 rs2:4
ADD_imm 0011 0000 .... .... @arith_imm width=1 add_carry=0
ADD_reg 0011 0001 .... .... @arith_reg width=1 add_carry=0
ADD_imm 0011 0100 .... .... @arith_imm width=1 add_carry=1
ADD_reg 0011 0101 .... .... @arith_reg width=1 add_carry=1
ADD_imm 0011 0110 .... .... @arith_imm width=2 add_carry=1
ADD_reg 0011 0111 .... .... @arith_reg width=2 add_carry=1
ADDD_imm 0000 0100 .... .... .... .... .... .... @arith_imm20
ADDD_imm 0000 0000 0010 .... .... .... .... .... .... .... .... .... @arith_imm32
ADDD_imm 0110 0000 .... .... @arith_imm_todo
ADDD_rp 0110 0001 .... .... @addd_rp
ADDU_imm 0010 1100 .... .... @arith_imm width=1 add_carry=0
ADDU_reg 0010 1101 .... .... @arith_reg width=1 add_carry=0
ADDU_imm 0010 1110 .... .... @arith_imm width=2 add_carry=0
ADDU_reg 0010 1111 .... .... @arith_reg width=2 add_carry=0
ADD_imm 0011 0010 .... .... @arith_imm width=2 add_carry=0
ADD_reg 0011 0011 .... .... @arith_reg width=2 add_carry=0
SUB_imm 0011 1000 .... .... @arith_imm width=1 add_carry=0
SUB_reg 0011 1001 .... .... @arith_reg width=1 add_carry=0
SUB_imm 0011 1100 .... .... @arith_imm width=1 add_carry=1
SUB_reg 0011 1101 .... .... @arith_reg width=1 add_carry=1
SUB_imm 0011 1110 .... .... @arith_imm width=2 add_carry=1
SUB_reg 0011 1111 .... .... @arith_reg width=2 add_carry=1
SUBD_rp 0000 0000 0001 0100 1100 0000 .... .... @subd_rp
SUBD_imm 0000 0000 0011 .... .... .... .... .... .... .... .... .... @arith_imm32
SUB_imm 0011 1010 .... .... @arith_imm width=2 add_carry=0
SUB_reg 0011 1011 .... .... @arith_reg width=2 add_carry=0
MUL_imm 0110 0100 .... .... @mul_imm width=1
MULB_reg 0110 0101 .... .... @mul_reg
MULSB_reg 0000 1011 .... .... @mul_reg
MULSW_reg 0110 0010 .... .... @mul_reg
MULUW_reg 0110 0011 .... .... @mul_reg
MUL_imm 0110 0110 .... .... @mul_imm width=2
MULW_reg 0110 0111 .... .... @mul_reg
MACQW 0000 0000 0001 0100 1101 .... .... .... @mac
MACUW 0000 0000 0001 0100 1110 .... .... .... @mac
MACSW 0000 0000 0001 0100 1111 .... .... .... @mac
### Integer Comparison
&cmp_imm rs imm width
&cmp_reg rs1 rs2 width
@cmp_imm .... .... .... rs:4 &cmp_imm imm=%u4_load_s16
@cmp_reg .... .... rs2:4 rs1:4 &cmp_reg
@cmp_imm32 .... .... .... rs:4 imm:s32 &cmp_imm
@cmpd_reg .... .... rs2:4 rs1:4
CMP_imm 0101 0000 .... .... @cmp_imm width=1
CMP_reg 0101 0001 .... .... @cmp_reg width=1
CMP_imm 0101 0010 .... .... @cmp_imm width=2
CMP_reg 0101 0011 .... .... @cmp_reg width=2
CMP_imm 0000 0000 1001 .... .... .... .... .... .... .... .... .... @cmp_imm32 width=4
CMP_imm 0101 0110 .... .... @cmp_imm width=4
CMPD_reg 0101 0111 .... .... @cmpd_reg
### Logical and Boolean
&logical_imm rd imm width
&logical_reg rd rs width
@logical_imm .... .... .... rd:4 imm=%u4_load_s16 &logical_imm
@logical_reg .... .... rs:4 rd:4 &logical_reg
@logical_dword_rp .... .... .... .... .... .... rs:4 rd:4
AND_imm 0010 0000 .... .... @logical_imm width=1
AND_reg 0010 0001 .... .... @logical_reg width=1
AND_imm 0010 0010 .... .... @logical_imm width=2
AND_reg 0010 0011 .... .... @logical_reg width=2
ANDD_imm 0000 0000 0100 .... .... .... .... .... .... .... .... .... @arith_imm32
ANDD_rp 0000 0000 0001 0100 1011 ---- .... .... @logical_dword_rp
OR_imm 0010 0100 .... .... @logical_imm width=1
OR_reg 0010 0101 .... .... @logical_reg width=1
OR_imm 0010 0110 .... .... @logical_imm width=2
OR_reg 0010 0111 .... .... @logical_reg width=2
ORD_imm 0000 0000 0101 .... .... .... .... .... .... .... .... .... @arith_imm32
ORD_rp 0000 0000 0001 0100 1001 ---- .... .... @logical_dword_rp
XOR_imm 0010 1000 .... .... @logical_imm width=1
XOR_reg 0010 1001 .... .... @logical_reg width=1
XOR_imm 0010 1010 .... .... @logical_imm width=2
XOR_reg 0010 1011 .... .... @logical_reg width=2
XORD_imm 0000 0000 0110 .... .... .... .... .... .... .... .... .... @arith_imm32
XORD_rp 0000 0000 0001 0100 1010 ---- .... .... @logical_dword_rp
SCOND 0000 1000 imm:4 rd:4
### Shifts
&shift_imm rd imm width
&shift_reg rd rc width
@shift_imm3 .... .... . imm:3 rd:4 &shift_imm
@shift_imm4 .... .... imm:4 rd:4 &shift_imm
@shift_reg .... .... rc:4 rd:4 &shift_reg
@shiftd_rp .... .... rc:4 rd:4
@shiftd_imm .... ... imm:5 rd:4
ASHU_imm_l 0100 0000 0... .... @shift_imm3 width=1
ASHU_imm_r 0100 0000 1... .... @shift_imm3 width=1
ASHU_reg 0100 0001 .... .... @shift_reg width=1
ASHU_imm_l 0100 0010 .... .... @shift_imm4 width=2
ASHU_imm_r 0100 0011 .... .... @shift_imm4 width=2
ASHU_reg 0100 0101 .... .... @shift_reg width=2
ASHUD_imm_l 0100 110. .... .... @shiftd_imm
ASHUD_imm_r 0100 111. .... .... @shiftd_imm
ASHUD_rp 0100 1000 .... .... @shiftd_rp
LSH_imm_r 0000 1001 1... .... @shift_imm3 width=1
LSH_reg 0100 0100 .... .... @shift_reg width=1
LSH_imm_r 0100 1001 .... .... @shift_imm4 width=2
LSH_reg 0100 0110 .... .... @shift_reg width=2
LSHD_imm_r 0100 101. .... .... @shiftd_imm
LSHD_rp 0100 0111 .... .... @shiftd_rp
### Bit operations ###
&xbit_reg ra pos dbase disp width
&xbit_rrp rrp pos disp width
&xbit_abs addr pos width
%xbit_disp14 40:6 46:2 52:2 32:4
%xbit_disp20 40:4 16:s16
@xbit_disp14_rrp .... .... .... rrp:4 .... .... pos:4 .... disp=%xbit_disp14 &xbit_rrp
@xbit_disp20_reg .... .... .... .... .... .... pos:4 ra:4 .... .... .... .... disp=%xbit_disp20 &xbit_reg
@xbit_disp20_rrp .... .... .... .... .... .... pos:4 rrp:4 .... .... .... .... disp=%xbit_disp20 &xbit_rrp
@xbitb_disp0_rp .... .... . pos:3 ra:4 &xbit_reg
@xbitw_disp0_rp .... .... pos:4 ra:4 &xbit_reg
@xbitb_disp16_reg .... .... . pos:3 ra:4 disp:s16 &xbit_reg
@xbitw_disp16_reg .... .... pos:4 ra:4 disp:s16 &xbit_reg
@xbitb_abs20 .... .... . pos:3 .... .... .... .... .... addr=%addr_abs20 &xbit_abs
@xbitw_abs20 .... .... pos:4 .... .... .... .... .... addr=%addr_abs20 &xbit_abs
@xbitb_abs20_rel .... .... . pos:3 .... .... .... .... .... disp=%addr_abs20 &xbit_reg
@xbitw_abs20_rel .... .... pos:4 .... .... .... .... .... disp=%addr_abs20 &xbit_reg
@xbit_abs24 .... .... .... .... .... .... pos:4 .... .... .... .... .... addr=%addr_disp24 &xbit_abs
CBIT_rrp 0110 1010 10.. .... .... .... .... .... width=1 @xbit_disp14_rrp
CBIT_reg 0000 0000 0001 0000 0100 .... .... .... .... .... .... .... width=1 dbase=0 @xbit_disp20_reg
CBIT_reg 0110 1010 0... .... width=1 dbase=1 disp=0 @xbitb_disp0_rp
CBIT_reg 0110 1011 0... .... .... .... .... .... width=1 dbase=1 @xbitb_disp16_reg
CBIT_reg 0000 0000 0001 0000 0101 .... .... .... .... .... .... .... width=1 dbase=1 @xbit_disp20_reg
CBIT_rrp 0000 0000 0001 0000 0110 .... .... .... .... .... .... .... width=1 @xbit_disp20_rrp
CBIT_abs 0110 1011 1... .... .... .... .... .... width=1 @xbitb_abs20
CBIT_reg 0110 1000 0... .... .... .... .... .... width=1 dbase=1 ra=12 @xbitb_abs20_rel
CBIT_reg 0110 1000 1... .... .... .... .... .... width=1 dbase=1 ra=13 @xbitb_abs20_rel
CBIT_abs 0000 0000 0001 0000 0111 .... .... .... .... .... .... .... width=1 @xbit_abs24
CBIT_rrp 0110 1010 11.. .... .... .... .... .... width=2 @xbit_disp14_rrp
CBIT_reg 0000 0000 0001 0001 0100 .... .... .... .... .... .... .... width=2 dbase=0 @xbit_disp20_reg
CBIT_reg 0110 1110 .... .... width=2 dbase=1 disp=0 @xbitw_disp0_rp
CBIT_reg 0110 1001 .... .... .... .... .... .... width=2 dbase=1 @xbitw_disp16_reg
CBIT_reg 0000 0000 0001 0001 0101 .... .... .... .... .... .... .... width=2 dbase=1 @xbit_disp20_reg
CBIT_rrp 0000 0000 0001 0001 0110 .... .... .... .... .... .... .... width=2 @xbit_disp20_rrp
CBIT_abs 0110 1111 .... .... .... .... .... .... width=2 @xbitw_abs20
CBIT_reg 0110 1100 .... .... .... .... .... .... width=2 dbase=1 ra=12 @xbitw_abs20_rel
CBIT_reg 0110 1101 .... .... .... .... .... .... width=2 dbase=1 ra=13 @xbitw_abs20_rel
CBIT_abs 0000 0000 0001 0001 0111 .... .... .... .... .... .... .... width=2 @xbit_abs24
SBIT_rrp 0111 0010 10.. .... .... .... .... .... width=1 @xbit_disp14_rrp
SBIT_reg 0000 0000 0001 0000 1000 .... .... .... .... .... .... .... width=1 dbase=0 @xbit_disp20_reg
SBIT_reg 0111 0010 0... .... width=1 dbase=1 disp=0 @xbitb_disp0_rp
SBIT_reg 0111 0011 0... .... .... .... .... .... width=1 dbase=1 @xbitb_disp16_reg
SBIT_reg 0000 0000 0001 0000 1001 .... .... .... .... .... .... .... width=1 dbase=1 @xbit_disp20_reg
SBIT_rrp 0000 0000 0001 0000 1010 .... .... .... .... .... .... .... width=1 @xbit_disp20_rrp
SBIT_abs 0111 0011 1... .... .... .... .... .... width=1 @xbitb_abs20
SBIT_reg 0111 0000 0... .... .... .... .... .... width=1 dbase=1 ra=12 @xbitb_abs20_rel
SBIT_reg 0111 0000 1... .... .... .... .... .... width=1 dbase=1 ra=13 @xbitb_abs20_rel
SBIT_abs 0000 0000 0001 0000 1011 .... .... .... .... .... .... .... width=1 @xbit_abs24
SBIT_rrp 0111 0010 11.. .... .... .... .... .... width=2 @xbit_disp14_rrp
SBIT_reg 0000 0000 0001 0001 1000 .... .... .... .... .... .... .... width=2 dbase=0 @xbit_disp20_reg
SBIT_reg 0111 0110 .... .... width=2 dbase=1 disp=0 @xbitw_disp0_rp
SBIT_reg 0111 0001 .... .... .... .... .... .... width=2 dbase=1 @xbitw_disp16_reg
SBIT_reg 0000 0000 0001 0001 1001 .... .... .... .... .... .... .... width=2 dbase=1 @xbit_disp20_reg
SBIT_rrp 0000 0000 0001 0001 1010 .... .... .... .... .... .... .... width=2 @xbit_disp20_rrp
SBIT_abs 0111 0111 .... .... .... .... .... .... width=2 @xbitw_abs20
SBIT_reg 0111 0100 .... .... .... .... .... .... width=2 dbase=1 ra=12 @xbitw_abs20_rel
SBIT_reg 0111 0101 .... .... .... .... .... .... width=2 dbase=1 ra=13 @xbitw_abs20_rel
SBIT_abs 0000 0000 0001 0001 1011 .... .... .... .... .... .... .... width=2 @xbit_abs24
TBIT_reg_imm 0000 0110 pos:4 rs:4
TBIT_reg_reg 0000 0111 rp:4 rs:4
TBIT_mem_rrp 0111 1010 10.. .... .... .... .... .... width=1 @xbit_disp14_rrp
TBIT_mem_reg 0000 0000 0001 0000 1100 .... .... .... .... .... .... .... width=1 dbase=0 @xbit_disp20_reg
TBIT_mem_reg 0111 1010 0... .... width=1 dbase=1 disp=0 @xbitb_disp0_rp
TBIT_mem_reg 0111 1011 0... .... .... .... .... .... width=1 dbase=1 @xbitb_disp16_reg
TBIT_mem_reg 0000 0000 0001 0000 1101 .... .... .... .... .... .... .... width=1 dbase=1 @xbit_disp20_reg
TBIT_mem_rrp 0000 0000 0001 0000 1110 .... .... .... .... .... .... .... width=1 @xbit_disp20_rrp
TBIT_mem_abs 0111 1011 1... .... .... .... .... .... width=1 @xbitb_abs20
TBIT_mem_reg 0111 1000 0... .... .... .... .... .... width=1 dbase=1 ra=12 @xbitb_abs20_rel
TBIT_mem_reg 0111 1000 1... .... .... .... .... .... width=1 dbase=1 ra=13 @xbitb_abs20_rel
TBIT_mem_abs 0000 0000 0001 0000 1111 .... .... .... .... .... .... .... width=1 @xbit_abs24
TBIT_mem_rrp 0111 1010 11.. .... .... .... .... .... width=2 @xbit_disp14_rrp
TBIT_mem_reg 0000 0000 0001 0001 1100 .... .... .... .... .... .... .... width=2 dbase=0 @xbit_disp20_reg
TBIT_mem_reg 0111 1110 .... .... width=2 dbase=1 disp=0 @xbitw_disp0_rp
TBIT_mem_reg 0111 1001 .... .... .... .... .... .... width=2 dbase=1 @xbitw_disp16_reg
TBIT_mem_reg 0000 0000 0001 0001 1101 .... .... .... .... .... .... .... width=2 dbase=1 @xbit_disp20_reg
TBIT_mem_rrp 0000 0000 0001 0001 1110 .... .... .... .... .... .... .... width=2 @xbit_disp20_rrp
TBIT_mem_abs 0111 1111 .... .... .... .... .... .... width=2 @xbitw_abs20
TBIT_mem_reg 0111 1100 .... .... .... .... .... .... width=2 dbase=1 ra=12 @xbitw_abs20_rel
TBIT_mem_reg 0111 1101 .... .... .... .... .... .... width=2 dbase=1 ra=13 @xbitw_abs20_rel
TBIT_mem_abs 0000 0000 0001 0001 1111 .... .... .... .... .... .... .... width=2 @xbit_abs24
### Jumps and Linkeage ###
%br_disp8 56:s4 48:4 !function=disp8_get_dest
BRCOND 0001 .... cond:4 .... dest=%br_disp8
BR0 0000 11 word:1 ne:1 dest:4 src:4
JCOND 0000 1010 cond:4 ra:4
EXCP 0000 0000 1100 id:4
&bal dest
@bal .... .... dest:23 . &bal
#@bal_3a .... .... .... .... .... p1_1916:4 p2:4 p1_2320:4 p1_1501:15 .
BAL_ra 1100 0000 .... .... .... .... .... ...- @bal # fmt 5
#BAL_rp 0000 0000 1000 0000 0010 .... .... .... .... .... .... .... @bal_3a # fmt 3a
&pop rt ra count dest
@pop .... ... rt:1 ra:1 count:3 dest:4 &pop
&push ra count src
@push .... .... ra:1 count:3 src:4 &push
pop 0000 001. .... .... @pop # fmt 14, includes popret via rt bit
push 0000 0001 .... .... @push # fmt 14
### Load and Store ###
&load rd ra dbase disp width
&load_rrp rd rrp disp width
&load_abs rd addr width remap
&load_ind_abs rd ri addr width
%load_disp20 40:4 16:s16
%load_disp14 40:6 46:2 52:2 32:4
%load_disp4 56:4
%load_disp4_shift 56:4 !function=get_disp4
@load_disp16_reg .... .... rd:4 ra:4 &load
@load_disp20_reg .... .... .... .... .... .... rd:4 ra:4 .... .... .... .... disp=%load_disp20 &load
@load_disp20_rrp .... .... .... .... .... .... rd:4 rrp:4 .... .... .... .... disp=%load_disp20 &load_rrp
@load_disp20_rp .... .... .... .... .... .... rd:4 ra:4 .... .... .... .... disp=%load_disp20 &load
@load_abs20 .... .... rd:4 .... .... .... .... .... addr=%addr_abs20 remap=1 &load_abs
@load_ind_abs .... ... ri:1 rd:4 addr:20 &load_ind_abs
@load_disp4_reg .... .... rd:4 ra:4 &load
@load_abs24 .... .... .... .... .... .... rd:4 .... .... .... .... .... addr=%addr_disp24 remap=0 &load_abs
#@load_disp14_rrp .... .... .... rrp:4 .... .... rd:4 .... disp=%load_disp14 &load_rrp
{
LOAD_rrp 1011 1110 rd:4 rrp:4 width=1 disp=0 &load_rrp
LOAD 1011 1111 .... .... @load_disp16_reg width=1 dbase=1 disp=%load_u16
LOAD 1011 .... .... .... @load_disp4_reg width=1 dbase=1 disp=%load_disp4
}
UNIMPLEMENTED 1000 0110 01-- ---- ---- ---- ---- ---- # Unable to test, because of gnu assembler bug
LOAD 0000 0000 0001 0010 0100 .... .... .... .... .... .... .... width=1 dbase=0 @load_disp20_reg
LOAD 0000 0000 0001 1000 0100 .... .... .... .... .... .... .... width=1 dbase=0 @load_disp20_reg
LOAD 0000 0000 0001 0010 0101 .... .... .... .... .... .... .... width=1 dbase=1 @load_disp20_reg
LOAD 0000 0000 0001 1000 0101 .... .... .... .... .... .... .... width=1 dbase=1 @load_disp20_reg
LOAD_rrp 0000 0000 0001 0010 0110 .... .... .... .... .... .... .... width=1 @load_disp20_rrp
LOAD_abs 1000 1000 .... .... .... .... .... .... width=1 @load_abs20
LOAD_ind_abs 1000 101. .... .... .... .... .... .... width=1 @load_ind_abs
LOAD_abs 0000 0000 0001 0010 0111 .... .... .... .... .... .... .... width=1 @load_abs24
{
LOAD_rrp 1001 1110 rd:4 rrp:4 width=2 disp=0 &load_rrp
LOAD 1001 1111 .... .... @load_disp16_reg width=2 dbase=1 disp=%load_u16
LOAD 1001 .... .... .... @load_disp4_reg width=2 dbase=1 disp=%load_disp4_shift
}
UNIMPLEMENTED 1000 0110 11-- ---- ---- ---- ---- ---- # Unable to test, because of gnu assembler bug
LOAD 0000 0000 0001 0010 1100 .... .... .... .... .... .... .... width=2 dbase=0 @load_disp20_reg
LOAD 0000 0000 0001 1000 1100 .... .... .... .... .... .... .... width=2 dbase=0 @load_disp20_reg
LOAD 0000 0000 0001 0010 1101 .... .... .... .... .... .... .... width=2 dbase=1 @load_disp20_reg
LOAD 0000 0000 0001 1000 1101 .... .... .... .... .... .... .... width=2 dbase=1 @load_disp20_reg
LOAD_rrp 0000 0000 0001 0010 1110 .... .... .... .... .... .... .... width=2 @load_disp20_rrp
LOAD_abs 1000 1001 .... .... .... .... .... .... width=2 @load_abs20
LOAD_ind_abs 1000 111. .... .... .... .... .... .... width=2 @load_ind_abs
LOAD_abs 0000 0000 0001 0010 1111 .... .... .... .... .... .... .... width=2 @load_abs24
{
LOAD_rrp 1010 1110 rd:4 rrp:4 width=4 disp=0 &load_rrp
LOAD 1010 1111 .... .... @load_disp16_reg width=4 dbase=1 disp=%load_u16
LOAD 1010 .... .... .... @load_disp4_reg width=4 dbase=1 disp=%load_disp4_shift
}
UNIMPLEMENTED 1000 0110 10-- ---- ---- ---- ---- ---- # Unable to test, because of gnu assembler bug
LOAD 0000 0000 0001 0010 1000 .... .... .... .... .... .... .... width=4 dbase=0 @load_disp20_reg
LOAD 0000 0000 0001 1000 1000 .... .... .... .... .... .... .... width=4 dbase=0 @load_disp20_reg
LOAD 0000 0000 0001 0010 1001 .... .... .... .... .... .... .... width=4 dbase=1 @load_disp20_rp
LOAD 0000 0000 0001 1000 1001 .... .... .... .... .... .... .... width=4 dbase=1 @load_disp20_rp
LOAD_rrp 0000 0000 0001 0010 1010 .... .... .... .... .... .... .... width=4 @load_disp20_rrp
LOAD_abs 1000 0111 .... .... .... .... .... .... width=4 @load_abs20
LOAD_ind_abs 1000 110. .... .... .... .... .... .... width=4 @load_ind_abs
LOAD_abs 0000 0000 0001 0010 1011 .... .... .... .... .... .... .... width=4 @load_abs24
&stor rs ra dbase disp width
&stor_rrp rs rrp disp width
&stor_abs rs addr width remap
&stor_ind_abs rs ri addr width
&stor_imm imm ra dbase disp width
&stor_rrp_imm imm rrp disp width
&stor_abs_imm imm addr width remap
&stor_abs_rrp_imm imm ri addr width
%stor_disp20 40:s4 16:s16
%stor_disp14 40:6 46:2 52:2 32:4
%stor_disp4 56:4
%stor_disp4_shift 56:4 !function=get_disp4
@stor_disp16_reg .... .... rs:4 ra:4 &stor
@stor_disp20_reg .... .... .... .... .... .... rs:4 ra:4 .... .... .... .... disp=%stor_disp20 &stor
@stor_disp20_rrp .... .... .... .... .... .... rs:4 rrp:4 .... .... .... .... disp=%stor_disp20 &stor_rrp
@stor_disp20_rp .... .... .... .... .... .... rs:4 ra:4 .... .... .... .... disp=%stor_disp20 &stor
@stor_abs20 .... .... rs:4 .... .... .... .... .... addr=%addr_abs20 remap=1 &stor_abs
@stor_ind_abs .... ... ri:1 rs:4 addr:20 &stor_ind_abs
@stor_disp4_reg .... .... rs:4 ra:4 &stor
@stor_abs24 .... .... .... .... .... .... rs:4 .... .... .... .... .... addr=%addr_disp24 remap=0 &stor_abs
#@stord_disp14_rrp .... .... .... rrp:4 .... .... rs:4 .... disp=%stor_disp14 &stor_rrp
@stor_disp14_rrp_imm .... .... .... rrp:4 .... .... imm:4 .... disp=%stor_disp14 &stor_rrp_imm
@stor_disp16_imm .... .... imm:4 ra:4 &stor_imm
@stor_disp20_reg_imm .... .... .... .... .... .... imm:4 ra:4 .... .... .... .... disp=%stor_disp20 &stor_imm
@stor_disp20_rrp_imm .... .... .... .... .... .... imm:4 rrp:4 .... .... .... .... disp=%stor_disp20 &stor_rrp_imm
@stor_disp20_rp_imm .... .... .... .... .... .... imm:4 ra:4 .... .... .... .... disp=%stor_disp20 &stor_imm
@stor_abs_imm .... .... imm:4 addr:20 remap=1 &stor_abs_imm
@stor_abs_rrp_imm .... ... ri:1 imm:4 addr:20 &stor_abs_rrp_imm
@stor_abs24_imm .... .... .... .... .... .... imm:4 .... .... .... .... .... addr=%addr_disp24 remap=0 &stor_abs_imm
{
STOR_rrp 1111 1110 rs:4 rrp:4 width=1 disp=0 &stor_rrp
STOR 1111 1111 .... .... @stor_disp16_reg width=1 dbase=1 disp=%load_u16
STOR 1111 .... .... .... @stor_disp4_reg width=1 dbase=1 disp=%stor_disp4
}
UNIMPLEMENTED 1100 0110 01-- ---- ---- ---- ---- ---- # Unable to test, because of gnu assembler bug
STOR 0000 0000 0001 0011 0100 .... .... .... .... .... .... .... width=1 dbase=0 @stor_disp20_reg
STOR 0000 0000 0001 1001 0100 .... .... .... .... .... .... .... width=1 dbase=0 @stor_disp20_reg
STOR 0000 0000 0001 0011 0101 .... .... .... .... .... .... .... width=1 dbase=1 @stor_disp20_rp
STOR 0000 0000 0001 1001 0101 .... .... .... .... .... .... .... width=1 dbase=1 @stor_disp20_rp
STOR_rrp 0000 0000 0001 0011 0110 .... .... .... .... .... .... .... width=1 @stor_disp20_rrp
STOR_abs 1100 1000 .... .... .... .... .... .... width=1 @stor_abs20
STOR_ind_abs 1100 101. .... .... .... .... .... .... width=1 @stor_ind_abs
STOR_abs 0000 0000 0001 0011 0111 .... .... .... .... .... .... .... width=1 @stor_abs24
STOR_rrp_imm 1000 0110 00.. .... .... .... .... .... width=1 @stor_disp14_rrp_imm
STOR_imm 0000 0000 0001 0010 0000 .... .... .... .... .... .... .... width=1 dbase=0 @stor_disp20_reg_imm
STOR_imm 1000 0010 imm:4 ra:4 width=1 dbase=1 disp=0 &stor_imm
STOR_imm 1000 0011 .... .... width=1 dbase=0 disp=%load_u16 @stor_disp16_imm
STOR_imm 0000 0000 0001 0010 0001 .... .... .... .... .... .... .... width=1 dbase=1 @stor_disp20_rp_imm
STOR_rrp_imm 0000 0000 0001 0010 0010 .... .... .... .... .... .... .... width=1 @stor_disp20_rrp_imm
STOR_abs_imm 1000 0001 .... .... .... .... .... .... width=1 @stor_abs_imm
STOR_abs_rrp_imm 1000 010. .... .... .... .... .... .... width=1 @stor_abs_rrp_imm
STOR_abs_imm 0000 0000 0001 0010 0011 .... .... .... .... .... .... .... width=1 @stor_abs24_imm
{
STOR_rrp 1101 1110 rs:4 rrp:4 width=2 disp=0 &stor_rrp
STOR 1101 1111 .... .... @stor_disp16_reg width=2 dbase=1 disp=%load_u16
STOR 1101 .... .... .... @stor_disp4_reg width=2 dbase=1 disp=%stor_disp4
}
UNIMPLEMENTED 1100 0110 11-- ---- ---- ---- ---- ---- # Unable to test, because of gnu assembler bug
STOR 0000 0000 0001 0011 1100 .... .... .... .... .... .... .... width=2 dbase=0 @stor_disp20_reg
STOR 0000 0000 0001 1001 1100 .... .... .... .... .... .... .... width=2 dbase=0 @stor_disp20_reg
STOR 0000 0000 0001 0011 1101 .... .... .... .... .... .... .... width=2 dbase=1 @stor_disp20_rp
STOR 0000 0000 0001 1001 1101 .... .... .... .... .... .... .... width=2 dbase=1 @stor_disp20_rp
STOR_rrp 0000 0000 0001 0011 1110 .... .... .... .... .... .... .... width=2 @stor_disp20_rrp
STOR_abs 1100 1001 .... .... .... .... .... .... width=2 @stor_abs20
STOR_ind_abs 1100 111. .... .... .... .... .... .... width=2 @stor_ind_abs
STOR_abs 0000 0000 0001 0011 1111 .... .... .... .... .... .... .... width=2 @stor_abs24
STOR_rrp_imm 1100 0110 00.. .... .... .... .... .... width=2 @stor_disp14_rrp_imm
STOR_imm 0000 0000 0001 0011 0000 .... .... .... .... .... .... .... width=2 dbase=0 @stor_disp20_reg_imm
STOR_imm 1100 0010 imm:4 ra:4 width=2 dbase=1 disp=0 &stor_imm
STOR_imm 1100 0011 .... .... width=2 dbase=0 disp=%load_u16 @stor_disp16_imm
STOR_imm 0000 0000 0001 0011 0001 .... .... .... .... .... .... .... width=2 dbase=1 @stor_disp20_rp_imm
STOR_rrp_imm 0000 0000 0001 0011 0010 .... .... .... .... .... .... .... width=2 @stor_disp20_rrp_imm
STOR_abs_imm 1100 0001 .... .... .... .... .... .... width=2 @stor_abs_imm
STOR_abs_rrp_imm 1100 010. .... .... .... .... .... .... width=2 @stor_abs_rrp_imm
STOR_abs_imm 0000 0000 0001 0011 0011 .... .... .... .... .... .... .... width=2 @stor_abs24_imm
{
STOR_rrp 1110 1110 rs:4 rrp:4 width=4 disp=0 &stor_rrp
STOR 1110 1111 .... .... @stor_disp16_reg width=4 dbase=1 disp=%load_u16
STOR 1110 .... .... .... @stor_disp4_reg width=4 dbase=1 disp=%stor_disp4
}
UNIMPLEMENTED 1100 0110 10-- ---- ---- ---- ---- ---- # Unable to test, because of gnu assembler bug
STOR 0000 0000 0001 0011 1000 .... .... .... .... .... .... .... width=4 dbase=0 @stor_disp20_reg
STOR 0000 0000 0001 1001 1000 .... .... .... .... .... .... .... width=4 dbase=0 @stor_disp20_reg
STOR 0000 0000 0001 0011 1001 .... .... .... .... .... .... .... width=4 dbase=1 @stor_disp20_rp
STOR 0000 0000 0001 1001 1001 .... .... .... .... .... .... .... width=4 dbase=1 @stor_disp20_rp
STOR_rrp 0000 0000 0001 0011 1010 .... .... .... .... .... .... .... width=4 @stor_disp20_rrp
STOR_abs 1100 0111 .... .... .... .... .... .... width=4 @stor_abs20
STOR_ind_abs 1100 110. .... .... .... .... .... .... width=4 @stor_ind_abs
STOR_abs 0000 0000 0001 0011 1011 .... .... .... .... .... .... .... width=4 @stor_abs24
&ldstm cnt pair
@ldstm .... .... .... . cnt:3 &ldstm
LOADM 0000 0000 1010 0... pair=0 @ldstm
LOADM 0000 0000 1010 1... pair=1 @ldstm
STORM 0000 0000 1011 0... pair=0 @ldstm
STORM 0000 0000 1011 1... pair=1 @ldstm
# Processor Register Manipulation
#LPR Rsrc, Rproc Load processor register
#LPRD RPsrc, Rprocd Load double processor register
#SPR Rproc, Rdest Store processor register
#SPRD Rprocd, RPdest Store double processor register
# fmt escape2
# followed by another word p4_4(mode) p3_4(res) p2_4(pr) p1_4(reg)
&lp_sp p2 p1
@lp_sp .... .... .... .... .... .... p2:4 p1:4 &lp_sp
# ope
LPR 0000 0000 0001 0100 0000 0000 .... .... @lp_sp
LPRD 0000 0000 0001 0100 0001 0000 .... .... @lp_sp
SPR 0000 0000 0001 0100 0010 0000 .... .... @lp_sp
SPRD 0000 0000 0001 0100 0011 0000 .... .... @lp_sp