CR16C: tcg code cleanup

This commit is contained in:
Jonas Bewig 2025-07-30 14:56:38 +02:00
parent 7a155e70f7
commit 361b5a2c43
No known key found for this signature in database
GPG key ID: 8D99867797A4886F
5 changed files with 563 additions and 856 deletions

View file

@ -19,7 +19,7 @@ static void sc14450_realize(DeviceState* dev, Error** errp)
object_initialize_child(OBJECT(dev), "cpu", &s->cpu, mc->cpu_type);
object_property_set_bool(OBJECT(&s->cpu), "realized", true, &error_abort);
memory_region_init_rom(&s->flash, OBJECT(dev), "flash", mc->flash_size, &error_fatal);
memory_region_init_ram(&s->flash, OBJECT(dev), "flash", mc->flash_size, &error_fatal);
memory_region_add_subregion(get_system_memory(), 0, &s->flash);
}

View file

@ -1,139 +1,181 @@
%param84_dest 56:4 48:4
%load_u16 !function=load_u16
%u4_load_s16 52:4 !function=u4_load_s16
%load_u16 !function=load_u16
@escape2_opc .... .... .... .... .... rd:4 rs1:4 rs2:4
@escape2_dc .... .... .... .... .... .... rs:4 rd:4
@param34 .... .... . imm:3 rd:4
@param4 .... .... .... imm:4
@param4_20 .... .... rd:4 imm:20
@param44 .... .... rs:4 rd:4
@param44_imm .... .... imm:4 rd:4
@param44_cmp_imm .... .... imm:4 rs:4
@param44_cmp .... .... rs2:4 rs1:4
@param44_count .... .... rc:4 rd:4
@param54 .... ... imm:5 rd:4
@param84 .... .... cond:4 .... dest=%param84_dest
@param4_32 .... .... .... rd:4 imm:32
### Moves ###
MOVB_imm4_16 0101 1000 .... .... @param44_imm
MOVB_reg 0101 1001 .... .... @param44
MOVD_imm20 0000 0101 .... .... .... .... .... .... @param4_20
MOVD_imm32 0000 0000 0111 .... .... .... .... .... .... .... .... .... @param4_32
MOVD_imm4_16 0101 0100 .... .... @param44_imm
MOVD_reg 0101 0101 .... .... @param44
MOVW_imm4_16 0101 1010 .... .... @param44_imm
MOVW_reg 0101 1011 .... .... @param44
MOVXB 0101 1100 .... .... @param44
MOVXW 0101 1110 .... .... @param44
MOVZB 0101 1101 .... .... @param44
MOVZW 0101 1111 .... .... @param44
&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 ###
ADDB_imm4_16 0011 0000 .... .... @param44_imm
ADDB_reg 0011 0001 .... .... @param44
ADDCB_imm4_16 0011 0100 .... .... @param44_imm
ADDCB_reg 0011 0101 .... .... @param44
ADDCW_imm4_16 0011 0110 .... .... @param44_imm
ADDCW_reg 0011 0111 .... .... @param44
ADDD_imm20 0000 0100 .... .... .... .... .... .... @param4_20
ADDD_imm32 0000 0000 0010 .... .... .... .... .... .... .... .... .... @param4_32
ADDD_imm4_16 0110 0000 .... .... @param44_imm
ADDD_rp 0110 0001 .... .... @param44
ADDUB_imm4_16 0010 1100 .... .... @param44_imm
ADDUB_reg 0010 1101 .... .... @param44
ADDUW_imm4_16 0010 1110 .... .... @param44_imm
ADDUW_reg 0010 1111 .... .... @param44
ADDW_imm4_16 0011 0010 .... .... @param44_imm
ADDW_reg 0011 0011 .... .... @param44
MACQW 0000 0000 0001 0100 1101 .... .... .... @escape2_opc
MACUW 0000 0000 0001 0100 1110 .... .... .... @escape2_opc
MACSW 0000 0000 0001 0100 1111 .... .... .... @escape2_opc
MULB_imm4_16 0110 0100 .... .... @param44_imm
MULB_reg 0110 0101 .... .... @param44
MULSB_reg 0000 1011 .... .... @param44
MULSW_reg 0110 0010 .... .... @param44
MULUW_reg 0110 0011 .... .... @param44
MULW_imm4_16 0110 0110 .... .... @param44_imm
MULW_reg 0110 0111 .... .... @param44
SUBB_imm4_16 0011 1000 .... .... @param44_imm
SUBB_reg 0011 1001 .... .... @param44
SUBCB_imm4_16 0011 1100 .... .... @param44_imm
SUBCB_reg 0011 1101 .... .... @param44
SUBCW_imm4_16 0011 1110 .... .... @param44_imm
SUBCW_reg 0011 1111 .... .... @param44
SUBD_reg 0000 0000 0001 0100 1100 0000 .... .... @escape2_dc
SUBD_imm32 0000 0000 0011 .... .... .... .... .... .... .... .... .... @param4_32
SUBW_imm4_16 0011 1010 .... .... @param44_imm
SUBW_reg 0011 1011 .... .... @param44
&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
CMPB_imm4_16 0101 0000 .... .... @param44_cmp_imm
CMPB_reg 0101 0001 .... .... @param44_cmp
CMPD_imm32 0000 0000 1001 .... .... .... .... .... .... .... .... .... @param4_32
CMPD_imm4_16 0101 0110 .... .... @param44_cmp_imm
CMPD_reg 0101 0111 .... .... @param44_cmp
CMPW_imm4_16 0101 0010 .... .... @param44_cmp_imm
CMPW_reg 0101 0011 .... .... @param44_cmp
&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
ANDB_imm4_16 0010 0000 .... .... @param44_imm
ANDB_reg 0010 0001 .... .... @param44
ANDW_imm4_16 0010 0010 .... .... @param44_imm
ANDW_reg 0010 0011 .... .... @param44
ANDD_imm32 0000 0000 0100 .... .... .... .... .... .... .... .... .... @param4_32
ANDD_rp 0000 0000 0001 0100 1011 ---- .... .... @escape2_dc
ORB_imm4_16 0010 0100 .... .... @param44_imm
ORB_reg 0010 0101 .... .... @param44
ORW_imm4_16 0010 0110 .... .... @param44_imm
ORW_reg 0010 0111 .... .... @param44
ORD_imm32 0000 0000 0101 .... .... .... .... .... .... .... .... .... @param4_32
ORD_rp 0000 0000 0001 0100 1001 ---- .... .... @escape2_dc
SCOND 0000 1000 .... .... @param44_imm
XORB_imm4_16 0010 1000 .... .... @param44_imm
XORB_reg 0010 1001 .... .... @param44
XORW_imm4_16 0010 1010 .... .... @param44_imm
XORW_reg 0010 1011 .... .... @param44
XORD_imm32 0000 0000 0110 .... .... .... .... .... .... .... .... .... @param4_32
XORD_rp 0000 0000 0001 0100 1010 ---- .... .... @escape2_dc
&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
ASHUB_imm_l 0100 0000 0... .... @param34
ASHUB_imm_r 0100 0000 1... .... @param34
ASHUB_reg 0100 0001 .... .... @param44_count
ASHUD_imm_l 0100 110. .... .... @param54
ASHUD_imm_r 0100 111. .... .... @param54
ASHUD_rp 0100 1000 .... .... @param44_count
ASHUW_imm_l 0100 0010 .... .... @param44_imm
ASHUW_imm_r 0100 0011 .... .... @param44_imm
ASHUW_reg 0100 0101 .... .... @param44_count
LSHB_imm_r 0000 1001 1... .... @param34
LSHB_reg 0100 0100 .... .... @param44_count
LSHD_imm_r 0100 101. .... .... @param54
LSHD_rp 0100 0111 .... .... @param44_count
LSHW_imm_r 0100 1001 .... .... @param44_imm
LSHW_reg 0100 0110 .... .... @param44_count
&shift_imm rd imm width
&shift_reg rd rc width
### Jumps and Linkeage
@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
BRCOND_disp8 0001 .... .... .... @param84
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
### Jumps and Linkeage ###
%br_disp8 56:4 48:4 !function=get_disp8
@br_disp8 .... .... cond:4 .... disp=%br_disp8
BRCOND_disp8 0001 .... .... .... @br_disp8
EXCP 0000 0000 1100 id:4
EXCP 0000 0000 1100 .... @param4
### Load and Store ###
%addr_abs20 32:20 !function=reloc_abs20
%addr_disp24 40:4 16:16 32:4
&load rd ra dbase disp word_cnt
&load_rrp rd rrp disp word_cnt
&load_abs rd addr word_cnt
&load_ind_abs rd ri addr word_cnt
&load rd ra dbase disp width
&load_rrp rd rrp disp width
&load_abs rd addr width
&load_ind_abs rd ri addr width
%load_disp20 40:4 16:s16
%load_disp14 40:6 46:2 52:2 32:4
@ -151,60 +193,58 @@ EXCP 0000 0000 1100 .... @param4
#@load_disp14_rrp .... .... .... rrp:4 .... .... rd:4 .... disp=%load_disp14 &load_rrp
{
LOAD_rrp 1011 1110 rd:4 rrp:4 word_cnt=1 disp=0 &load_rrp
LOAD 1011 1111 .... .... @load_disp16_reg word_cnt=1 dbase=1 disp=%load_u16
LOAD 1011 .... .... .... @load_disp4_reg word_cnt=1 dbase=1 disp=%load_disp4
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 .... .... .... .... .... .... .... word_cnt=1 dbase=0 @load_disp20_reg
LOAD 0000 0000 0001 1000 0100 .... .... .... .... .... .... .... word_cnt=1 dbase=0 @load_disp20_reg
LOAD 0000 0000 0001 0010 0101 .... .... .... .... .... .... .... word_cnt=1 dbase=1 @load_disp20_reg
LOAD 0000 0000 0001 1000 0101 .... .... .... .... .... .... .... word_cnt=1 dbase=1 @load_disp20_reg
LOAD_rrp 0000 0000 0001 0010 0110 .... .... .... .... .... .... .... word_cnt=1 @load_disp20_rrp
LOAD_abs 1000 1000 .... .... .... .... .... .... word_cnt=1 @load_abs20
LOAD_ind_abs 1000 101. .... .... .... .... .... .... word_cnt=1 @load_ind_abs
LOAD_abs 0000 0000 0001 0010 0111 .... .... .... .... .... .... .... word_cnt=1 @load_abs24
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 word_cnt=2 disp=0 &load_rrp
LOAD 1001 1111 .... .... @load_disp16_reg word_cnt=2 dbase=1 disp=%load_u16
LOAD 1001 .... .... .... @load_disp4_reg word_cnt=2 dbase=1 disp=%load_disp4_shift
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 .... .... .... .... .... .... .... word_cnt=2 dbase=0 @load_disp20_reg
LOAD 0000 0000 0001 1000 1100 .... .... .... .... .... .... .... word_cnt=2 dbase=0 @load_disp20_reg
LOAD 0000 0000 0001 0010 1101 .... .... .... .... .... .... .... word_cnt=2 dbase=1 @load_disp20_reg
LOAD 0000 0000 0001 1000 1101 .... .... .... .... .... .... .... word_cnt=2 dbase=1 @load_disp20_reg
LOAD_rrp 0000 0000 0001 0010 1110 .... .... .... .... .... .... .... word_cnt=2 @load_disp20_rrp
LOAD_abs 1000 1001 .... .... .... .... .... .... word_cnt=2 @load_abs20
LOAD_ind_abs 1000 111. .... .... .... .... .... .... word_cnt=2 @load_ind_abs
LOAD_abs 0000 0000 0001 0010 1111 .... .... .... .... .... .... .... word_cnt=2 @load_abs24
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 word_cnt=4 disp=0 &load_rrp
LOAD 1010 1111 .... .... @load_disp16_reg word_cnt=4 dbase=1 disp=%load_u16
LOAD 1010 .... .... .... @load_disp4_reg word_cnt=4 dbase=1 disp=%load_disp4_shift
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 .... .... .... .... .... .... .... word_cnt=4 dbase=0 @load_disp20_reg
LOAD 0000 0000 0001 1000 1000 .... .... .... .... .... .... .... word_cnt=4 dbase=0 @load_disp20_reg
LOAD 0000 0000 0001 0010 1001 .... .... .... .... .... .... .... word_cnt=4 dbase=1 @load_disp20_rp
LOAD 0000 0000 0001 1000 1001 .... .... .... .... .... .... .... word_cnt=4 dbase=1 @load_disp20_rp
LOAD_rrp 0000 0000 0001 0010 1010 .... .... .... .... .... .... .... word_cnt=4 @load_disp20_rrp
LOAD_abs 1000 0111 .... .... .... .... .... .... word_cnt=4 @load_abs20
LOAD_ind_abs 1000 110. .... .... .... .... .... .... word_cnt=4 @load_ind_abs
LOAD_abs 0000 0000 0001 0010 1011 .... .... .... .... .... .... .... word_cnt=4 @load_abs24
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 word_cnt
&stor_rrp rs rrp disp word_cnt
&stor_abs rs addr word_cnt
&stor_ind_abs rs ri addr word_cnt
&stor rs ra dbase disp width
&stor_rrp rs rrp disp width
&stor_abs rs addr width
&stor_ind_abs rs ri addr width
&stor_imm imm ra dbase disp word_cnt
&stor_rrp_imm imm rrp disp word_cnt
&stor_abs_imm imm addr word_cnt
&stor_abs_rrp_imm imm ri addr word_cnt
#&storm cnt pair
&stor_imm imm ra dbase disp width
&stor_rrp_imm imm rrp disp width
&stor_abs_imm imm addr width
&stor_abs_rrp_imm imm ri addr width
%stor_disp20 40:s4 16:s16
%stor_disp14 40:6 46:2 52:2 32:4
@ -231,65 +271,65 @@ LOAD_abs 0000 0000 0001 0010 1011 .... .... .... .... .... .... ....
@stor_abs24_imm .... .... .... .... .... .... imm:4 .... .... .... .... .... addr=%addr_disp24 &stor_abs_imm
{
STOR_rrp 1111 1110 rs:4 rrp:4 word_cnt=1 disp=0 &stor_rrp
STOR 1111 1111 .... .... @stor_disp16_reg word_cnt=1 dbase=1 disp=%load_u16
STOR 1111 .... .... .... @stor_disp4_reg word_cnt=1 dbase=1 disp=%stor_disp4
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 .... .... .... .... .... .... .... word_cnt=1 dbase=0 @stor_disp20_reg
STOR 0000 0000 0001 1001 0100 .... .... .... .... .... .... .... word_cnt=1 dbase=0 @stor_disp20_reg
STOR 0000 0000 0001 0011 0101 .... .... .... .... .... .... .... word_cnt=1 dbase=1 @stor_disp20_rp
STOR 0000 0000 0001 1001 0101 .... .... .... .... .... .... .... word_cnt=1 dbase=1 @stor_disp20_rp
STOR_rrp 0000 0000 0001 0011 0110 .... .... .... .... .... .... .... word_cnt=1 @stor_disp20_rrp
STOR_abs 1100 1000 .... .... .... .... .... .... word_cnt=1 @stor_abs20
STOR_ind_abs 1100 101. .... .... .... .... .... .... word_cnt=1 @stor_ind_abs
STOR_abs 0000 0000 0001 0011 0111 .... .... .... .... .... .... .... word_cnt=1 @stor_abs24
STOR_rrp_imm 1000 0110 00.. .... .... .... .... .... word_cnt=1 @stor_disp14_rrp_imm
STOR_imm 0000 0000 0001 0010 0000 .... .... .... .... .... .... .... word_cnt=1 dbase=0 @stor_disp20_reg_imm
STOR_imm 1000 0010 imm:4 ra:4 word_cnt=1 dbase=1 disp=0 &stor_imm
STOR_imm 1000 0011 .... .... word_cnt=1 dbase=0 disp=%load_u16 @stor_disp16_imm
STOR_imm 0000 0000 0001 0010 0001 .... .... .... .... .... .... .... word_cnt=1 dbase=1 @stor_disp20_rp_imm
STOR_rrp_imm 0000 0000 0001 0010 0010 .... .... .... .... .... .... .... word_cnt=1 @stor_disp20_rrp_imm
STOR_abs_imm 1000 0001 .... .... .... .... .... .... word_cnt=1 @stor_abs_imm
STOR_abs_rrp_imm 1000 010. .... .... .... .... .... .... word_cnt=1 @stor_abs_rrp_imm
STOR_abs_imm 0000 0000 0001 0010 0011 .... .... .... .... .... .... .... word_cnt=1 @stor_abs24_imm
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 word_cnt=2 disp=0 &stor_rrp
STOR 1101 1111 .... .... @stor_disp16_reg word_cnt=2 dbase=1 disp=%load_u16
STOR 1101 .... .... .... @stor_disp4_reg word_cnt=2 dbase=1 disp=%stor_disp4
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 .... .... .... .... .... .... .... word_cnt=2 dbase=0 @stor_disp20_reg
STOR 0000 0000 0001 1001 1100 .... .... .... .... .... .... .... word_cnt=2 dbase=0 @stor_disp20_reg
STOR 0000 0000 0001 0011 1101 .... .... .... .... .... .... .... word_cnt=2 dbase=1 @stor_disp20_rp
STOR 0000 0000 0001 1001 1101 .... .... .... .... .... .... .... word_cnt=2 dbase=1 @stor_disp20_rp
STOR_rrp 0000 0000 0001 0011 1110 .... .... .... .... .... .... .... word_cnt=2 @stor_disp20_rrp
STOR_abs 1100 1001 .... .... .... .... .... .... word_cnt=2 @stor_abs20
STOR_ind_abs 1100 111. .... .... .... .... .... .... word_cnt=2 @stor_ind_abs
STOR_abs 0000 0000 0001 0011 1111 .... .... .... .... .... .... .... word_cnt=2 @stor_abs24
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 1110 1110 rs:4 rrp:4 word_cnt=4 disp=0 &stor_rrp
STOR 1110 1111 .... .... @stor_disp16_reg word_cnt=4 dbase=1 disp=%load_u16
STOR 1110 .... .... .... @stor_disp4_reg word_cnt=4 dbase=1 disp=%stor_disp4
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 .... .... .... .... .... .... .... word_cnt=4 dbase=0 @stor_disp20_reg
STOR 0000 0000 0001 1001 1000 .... .... .... .... .... .... .... word_cnt=4 dbase=0 @stor_disp20_reg
STOR 0000 0000 0001 0011 1001 .... .... .... .... .... .... .... word_cnt=4 dbase=1 @stor_disp20_rp
STOR 0000 0000 0001 1001 1001 .... .... .... .... .... .... .... word_cnt=4 dbase=1 @stor_disp20_rp
STOR_rrp 0000 0000 0001 0011 1010 .... .... .... .... .... .... .... word_cnt=4 @stor_disp20_rrp
STOR_abs 1100 0111 .... .... .... .... .... .... word_cnt=4 @stor_abs20
STOR_ind_abs 1100 110. .... .... .... .... .... .... word_cnt=4 @stor_ind_abs
STOR_abs 0000 0000 0001 0011 1011 .... .... .... .... .... .... .... word_cnt=4 @stor_abs24
STOR_rrp_imm 1100 0110 00.. .... .... .... .... .... word_cnt=4 @stor_disp14_rrp_imm
STOR_imm 0000 0000 0001 0011 0000 .... .... .... .... .... .... .... word_cnt=4 dbase=0 @stor_disp20_reg_imm
STOR_imm 1100 0010 imm:4 ra:4 word_cnt=4 dbase=1 disp=0 &stor_imm
STOR_imm 1100 0011 .... .... word_cnt=4 dbase=0 disp=%load_u16 @stor_disp16_imm
STOR_imm 0000 0000 0001 0011 0001 .... .... .... .... .... .... .... word_cnt=4 dbase=1 @stor_disp20_rp_imm
STOR_rrp_imm 0000 0000 0001 0011 0010 .... .... .... .... .... .... .... word_cnt=4 @stor_disp20_rrp_imm
STOR_abs_imm 1100 0001 .... .... .... .... .... .... word_cnt=4 @stor_abs_imm
STOR_abs_rrp_imm 1100 010. .... .... .... .... .... .... word_cnt=4 @stor_abs_rrp_imm
STOR_abs_imm 0000 0000 0001 0011 0011 .... .... .... .... .... .... .... word_cnt=4 @stor_abs24_imm
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
STOR_rrp_imm 1100 0110 00.. .... .... .... .... .... width=4 @stor_disp14_rrp_imm
STOR_imm 0000 0000 0001 0011 0000 .... .... .... .... .... .... .... width=4 dbase=0 @stor_disp20_reg_imm
STOR_imm 1100 0010 imm:4 ra:4 width=4 dbase=1 disp=0 &stor_imm
STOR_imm 1100 0011 .... .... width=4 dbase=0 disp=%load_u16 @stor_disp16_imm
STOR_imm 0000 0000 0001 0011 0001 .... .... .... .... .... .... .... width=4 dbase=1 @stor_disp20_rp_imm
STOR_rrp_imm 0000 0000 0001 0011 0010 .... .... .... .... .... .... .... width=4 @stor_disp20_rrp_imm
STOR_abs_imm 1100 0001 .... .... .... .... .... .... width=4 @stor_abs_imm
STOR_abs_rrp_imm 1100 010. .... .... .... .... .... .... width=4 @stor_abs_rrp_imm
STOR_abs_imm 0000 0000 0001 0011 0011 .... .... .... .... .... .... .... width=4 @stor_abs24_imm
&ldstm cnt pair

File diff suppressed because it is too large Load diff

View file

@ -16,10 +16,8 @@ QEMU_OPTS+=-M sc14450board -nographic $(EXTFLAGS) -bios
LDFLAGS = -nostdlib -static
%: %.S macros.inc Makefile.softmmu-target
$(CC) $(EXTRA_CFLAGS) $< -o $@.elf $(LDFLAGS)
# TODO: There seems to be a linker bug with the binary format for cr16
# For now we extract the text section with a hardcoded objcopy command name :/
cr16-unknown-elf-objcopy --dump-section .text=$@ $@.elf /dev/null
$(CC) $(EXTRA_CFLAGS) $< -o $@.elf -O0 $(LDFLAGS)
$$($(CC) -print-prog-name=objcopy) -O binary $@.elf $@
# We don't support the multiarch system tests yet
undefine MULTIARCH_TESTS

View file

@ -38,11 +38,11 @@ _start:
EXPECT 0x0387, r8
/* Unsigned and signed overflow */
movw $0x80, r10
addb $0x80, r10
addb $-0x80, r10
EXPECT_COND cs
EXPECT 0x0000, r10
movw $0x80, r10
addb $0x80, r10
addb $-0x80, r10
EXPECT_COND fs
EXPECT 0x0000, r10
/* dword reg */