123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992 |
- # Hitachi H8 testcase 'addx'
- # mach(): all
- # as(h8300): --defsym sim_cpu=0
- # as(h8300h): --defsym sim_cpu=1
- # as(h8300s): --defsym sim_cpu=2
- # as(h8sx): --defsym sim_cpu=3
- # ld(h8300h): -m h8300helf
- # ld(h8300s): -m h8300self
- # ld(h8sx): -m h8300sxelf
- .include "testutils.inc"
- # Instructions tested:
- # addx.b #xx:8, rd8 ; 9 rd8 xxxxxxxx
- # addx.b #xx:8, @erd ; 7 d erd ???? 9 ???? xxxxxxxx
- # addx.b #xx:8, @erd- ; 0 1 7 6 6 c erd 1??? 9 ???? xxxxxxxx
- # addx.b rs8, rd8 ; 0 e rs8 rd8
- # addx.b rs8, @erd ; 7 d erd ???? 0 e rs8 ????
- # addx.b rs8, @erd- ; 0 1 7 6 6 c erd 1??? 0 e rs8 ????
- # addx.b @ers, rd8 ; 7 c ers ???? 0 e ???? rd8
- # addx.b @ers-, rd8 ; 0 1 7 6 6 c ers 00?? 0 e ???? rd8
- # addx.b @ers, @erd ; 0 1 7 4 6 8 ers d 0 erd 1 ????
- # addx.b @ers-, @erd- ; 0 1 7 6 6 c ers d a erd 1 ????
- #
- # word ops
- # long ops
- .data
- byte_src: .byte 0x5
- byte_dest: .byte 0
- .align 2
- word_src: .word 0x505
- word_dest: .word 0
- .align 4
- long_src: .long 0x50505
- long_dest: .long 0
- start
- addx_b_imm8_0:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.b #xx:8,Rd ; Addx with carry initially zero.
- addx.b #5, r0l ; Immediate 8-bit operand
- test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_set
- test_h_gr16 0xa5aa r0 ; add result: a5 + 5
- .if (sim_cpu) ; non-zero means h8300h, s, or sx
- test_h_gr32 0xa5a5a5aa er0 ; add result: a5 + 5
- .endif
- test_gr_a5a5 1 ; Make sure other general regs not disturbed
- test_gr_a5a5 2
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
-
- addx_b_imm8_1:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.b #xx:8,Rd ; Addx with carry initially one.
- set_carry_flag
- addx.b #5, r0l ; Immediate 8-bit operand
- test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_set
- test_h_gr16 0xa5ab r0 ; add result: a5 + 5 + 1
- .if (sim_cpu) ; non-zero means h8300h, s, or sx
- test_h_gr32 0xa5a5a5ab er0 ; add result: a5 + 5 + 1
- .endif
- test_gr_a5a5 1 ; Make sure other general regs not disturbed
- test_gr_a5a5 2
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
-
- .if (sim_cpu == h8sx)
- addx_b_imm8_rdind:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.b #xx:8,@eRd ; Addx to register indirect
- mov #byte_dest, er0
- addx.b #5, @er0
- test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_clear
- test_h_gr32 byte_dest er0 ; er0 still contains address
- test_gr_a5a5 1 ; Make sure other general regs not disturbed
- test_gr_a5a5 2
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- ;; Now check the result of the add to memory.
- cmp.b #5, @byte_dest
- beq .Lb1
- fail
- .Lb1:
- addx_b_imm8_rdpostdec:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.b #xx:8,@eRd- ; Addx to register post-decrement
- mov #byte_dest, er0
- addx.b #5, @er0-
- test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_clear
- test_h_gr32 byte_dest-1 er0 ; er0 contains address minus one
- test_gr_a5a5 1 ; Make sure other general regs not disturbed
- test_gr_a5a5 2
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- ;; Now check the result of the add to memory.
- cmp.b #10, @byte_dest
- beq .Lb2
- fail
- .Lb2:
- .endif
- addx_b_reg8_0:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.b Rs,Rd ; addx with carry initially zero
- mov.b #5, r0h
- addx.b r0h, r0l ; Register operand
- test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_set
- test_h_gr16 0x05aa r0 ; add result: a5 + 5
- .if (sim_cpu) ; non-zero means h8300h, s, or sx
- test_h_gr32 0xa5a505aa er0 ; add result: a5 + 5
- .endif
- test_gr_a5a5 1 ; Make sure other general regs not disturbed
- test_gr_a5a5 2
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- addx_b_reg8_1:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.b Rs,Rd ; addx with carry initially one
- mov.b #5, r0h
- set_carry_flag
- addx.b r0h, r0l ; Register operand
- test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_set
- test_h_gr16 0x05ab r0 ; add result: a5 + 5 + 1
- .if (sim_cpu) ; non-zero means h8300h, s, or sx
- test_h_gr32 0xa5a505ab er0 ; add result: a5 + 5 + 1
- .endif
- test_gr_a5a5 1 ; Make sure other general regs not disturbed
- test_gr_a5a5 2
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
-
- .if (sim_cpu == h8sx)
- addx_b_reg8_rdind:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.b rs8,@eRd ; Addx to register indirect
- mov #byte_dest, er0
- mov.b #5, r1l
- addx.b r1l, @er0
- test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_clear
- test_h_gr32 byte_dest er0 ; er0 still contains address
- test_h_gr32 0xa5a5a505 er1 ; er1 has the test load
- test_gr_a5a5 2 ; Make sure other general regs not disturbed
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- ;; Now check the result of the add to memory.
- cmp.b #15, @byte_dest
- beq .Lb3
- fail
- .Lb3:
- addx_b_reg8_rdpostdec:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.b rs8,@eRd- ; Addx to register post-decrement
- mov #byte_dest, er0
- mov.b #5, r1l
- addx.b r1l, @er0-
- test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_clear
- test_h_gr32 byte_dest-1 er0 ; er0 contains address minus one
- test_h_gr32 0xa5a5a505 er1 ; er1 contains the test load
- test_gr_a5a5 2 ; Make sure other general regs not disturbed
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- ;; Now check the result of the add to memory.
- cmp.b #20, @byte_dest
- beq .Lb4
- fail
- .Lb4:
- addx_b_rsind_reg8:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.b @eRs,rd8 ; Addx from reg indirect to reg
- mov #byte_src, er0
- addx.b @er0, r1l
- test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_set
- test_h_gr32 byte_src er0 ; er0 still contains address
- test_h_gr32 0xa5a5a5aa er1 ; er1 contains the sum
- test_gr_a5a5 2 ; Make sure other general regs not disturbed
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- addx_b_rspostdec_reg8:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.b @eRs-,rd8 ; Addx to register post-decrement
- mov #byte_src, er0
- addx.b @er0-, r1l
- test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_set
- test_h_gr32 byte_src-1 er0 ; er0 contains address minus one
- test_h_gr32 0xa5a5a5aa er1 ; er1 contains the sum
- test_gr_a5a5 2 ; Make sure other general regs not disturbed
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- addx_b_rsind_rsind:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.b @eRs,rd8 ; Addx from reg indirect to reg
- mov #byte_src, er0
- mov #byte_dest, er1
- addx.b @er0, @er1
- test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_clear
- test_h_gr32 byte_src er0 ; er0 still contains src address
- test_h_gr32 byte_dest er1 ; er1 still contains dst address
- test_gr_a5a5 2 ; Make sure other general regs not disturbed
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- ;; Now check the result of the add to memory.
- cmp.b #25, @byte_dest
- beq .Lb5
- fail
- .Lb5:
- addx_b_rspostdec_rspostdec:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.b @eRs-,rd8 ; Addx to register post-decrement
- mov #byte_src, er0
- mov #byte_dest, er1
- addx.b @er0-, @er1-
- test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_clear
- test_h_gr32 byte_src-1 er0 ; er0 contains src address minus one
- test_h_gr32 byte_dest-1 er1 ; er1 contains dst address minus one
- test_gr_a5a5 2 ; Make sure other general regs not disturbed
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- ;; Now check the result of the add to memory.
- cmp.b #30, @byte_dest
- beq .Lb6
- fail
- .Lb6:
- addx_w_imm16_0:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.w #xx:16,Rd ; Addx with carry initially zero.
- addx.w #0x505, r0 ; Immediate 16-bit operand
- test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_set
- test_h_gr16 0xaaaa r0 ; add result: 0xa5a5 + 0x505
- test_h_gr32 0xa5a5aaaa er0 ; add result: 0xa5a5 + 0x505
- test_gr_a5a5 1 ; Make sure other general regs not disturbed
- test_gr_a5a5 2
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
-
- addx_w_imm16_1:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.w #xx:16,Rd ; Addx with carry initially one.
- set_carry_flag
- addx.w #0x505, r0 ; Immediate 16-bit operand
- test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_set
- test_h_gr16 0xaaab r0 ; add result: 0xa5a5 + 0x505 + 1
- test_h_gr32 0xa5a5aaab er0 ; add result: 0xa5a5 + 0x505 + 1
- test_gr_a5a5 1 ; Make sure other general regs not disturbed
- test_gr_a5a5 2
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
-
- addx_w_imm16_rdind:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.w #xx:16,@eRd ; Addx to register indirect
- mov #word_dest, er0
- addx.w #0x505, @er0
- test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_clear
- test_h_gr32 word_dest er0 ; er0 still contains address
- test_gr_a5a5 1 ; Make sure other general regs not disturbed
- test_gr_a5a5 2
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- ;; Now check the result of the add to memory.
- cmp.w #0x505, @word_dest
- beq .Lw1
- fail
- .Lw1:
- addx_w_imm16_rdpostdec:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.w #xx:16,@eRd- ; Addx to register post-decrement
- mov #word_dest, er0
- addx.w #0x505, @er0-
- test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_clear
- test_h_gr32 word_dest-2 er0 ; er0 contains address minus one
- test_gr_a5a5 1 ; Make sure other general regs not disturbed
- test_gr_a5a5 2
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- ;; Now check the result of the add to memory.
- cmp.w #0xa0a, @word_dest
- beq .Lw2
- fail
- .Lw2:
- addx_w_reg16_0:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.w Rs,Rd ; addx with carry initially zero
- mov.w #0x505, e0
- addx.w e0, r0 ; Register operand
- test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_set
- test_h_gr32 0x0505aaaa er0 ; add result:
- test_gr_a5a5 1 ; Make sure other general regs not disturbed
- test_gr_a5a5 2
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- addx_w_reg16_1:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.w Rs,Rd ; addx with carry initially one
- mov.w #0x505, e0
- set_carry_flag
- addx.w e0, r0 ; Register operand
- test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_set
- test_h_gr32 0x0505aaab er0 ; add result:
- test_gr_a5a5 1 ; Make sure other general regs not disturbed
- test_gr_a5a5 2
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
-
- addx_w_reg16_rdind:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.w rs8,@eRd ; Addx to register indirect
- mov #word_dest, er0
- mov.w #0x505, r1
- addx.w r1, @er0
- test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_clear
- test_h_gr32 word_dest er0 ; er0 still contains address
- test_h_gr32 0xa5a50505 er1 ; er1 has the test load
- test_gr_a5a5 2 ; Make sure other general regs not disturbed
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- ;; Now check the result of the add to memory.
- cmp.w #0xf0f, @word_dest
- beq .Lw3
- fail
- .Lw3:
- addx_w_reg16_rdpostdec:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.w rs8,@eRd- ; Addx to register post-decrement
- mov #word_dest, er0
- mov.w #0x505, r1
- addx.w r1, @er0-
- test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_clear
- test_h_gr32 word_dest-2 er0 ; er0 contains address minus one
- test_h_gr32 0xa5a50505 er1 ; er1 contains the test load
- test_gr_a5a5 2 ; Make sure other general regs not disturbed
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- ;; Now check the result of the add to memory.
- cmp.w #0x1414, @word_dest
- beq .Lw4
- fail
- .Lw4:
- addx_w_rsind_reg16:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.w @eRs,rd8 ; Addx from reg indirect to reg
- mov #word_src, er0
- addx.w @er0, r1
- test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_set
- test_h_gr32 word_src er0 ; er0 still contains address
- test_h_gr32 0xa5a5aaaa er1 ; er1 contains the sum
- test_gr_a5a5 2 ; Make sure other general regs not disturbed
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- addx_w_rspostdec_reg16:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.w @eRs-,rd8 ; Addx to register post-decrement
- mov #word_src, er0
- addx.w @er0-, r1
- test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_set
- test_h_gr32 word_src-2 er0 ; er0 contains address minus one
- test_h_gr32 0xa5a5aaaa er1 ; er1 contains the sum
- test_gr_a5a5 2 ; Make sure other general regs not disturbed
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- addx_w_rsind_rdind:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.w @eRs,rd8 ; Addx from reg indirect to reg
- mov #word_src, er0
- mov #word_dest, er1
- addx.w @er0, @er1
- test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_clear
- test_h_gr32 word_src er0 ; er0 still contains src address
- test_h_gr32 word_dest er1 ; er1 still contains dst address
- test_gr_a5a5 2 ; Make sure other general regs not disturbed
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- ;; Now check the result of the add to memory.
- cmp.w #0x1919, @word_dest
- beq .Lw5
- fail
- .Lw5:
- addx_w_rspostdec_rdpostdec:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.w @eRs-,rd8 ; Addx to register post-decrement
- mov #word_src, er0
- mov #word_dest, er1
- addx.w @er0-, @er1-
- test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_clear
- test_h_gr32 word_src-2 er0 ; er0 contains src address minus one
- test_h_gr32 word_dest-2 er1 ; er1 contains dst address minus one
- test_gr_a5a5 2 ; Make sure other general regs not disturbed
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- ;; Now check the result of the add to memory.
- cmp.w #0x1e1e, @word_dest
- beq .Lw6
- fail
- .Lw6:
- addx_l_imm32_0:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.l #xx:32,Rd ; Addx with carry initially zero.
- addx.l #0x50505, er0 ; Immediate 32-bit operand
- test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_set
- test_h_gr32 0xa5aaaaaa er0 ; add result:
- test_gr_a5a5 1 ; Make sure other general regs not disturbed
- test_gr_a5a5 2
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
-
- addx_l_imm32_1:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.l #xx:32,Rd ; Addx with carry initially one.
- set_carry_flag
- addx.l #0x50505, er0 ; Immediate 32-bit operand
- test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_set
- test_h_gr32 0xa5aaaaab er0 ; add result:
- test_gr_a5a5 1 ; Make sure other general regs not disturbed
- test_gr_a5a5 2
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
-
- addx_l_imm32_rdind:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.l #xx:32,@eRd ; Addx to register indirect
- mov #long_dest, er0
- addx.l #0x50505, @er0
- test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_clear
- test_h_gr32 long_dest er0 ; er0 still contains address
- test_gr_a5a5 1 ; Make sure other general regs not disturbed
- test_gr_a5a5 2
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- ;; Now check the result of the add to memory.
- cmp.l #0x50505, @long_dest
- beq .Ll1
- fail
- .Ll1:
- addx_l_imm32_rdpostdec:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.l #xx:32,@eRd- ; Addx to register post-decrement
- mov #long_dest, er0
- addx.l #0x50505, @er0-
- test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_clear
- test_h_gr32 long_dest-4 er0 ; er0 contains address minus one
- test_gr_a5a5 1 ; Make sure other general regs not disturbed
- test_gr_a5a5 2
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- ;; Now check the result of the add to memory.
- cmp.l #0xa0a0a, @long_dest
- beq .Ll2
- fail
- .Ll2:
- addx_l_reg32_0:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.l Rs,Rd ; addx with carry initially zero
- mov.l #0x50505, er0
- addx.l er0, er1 ; Register operand
- test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_set
- test_h_gr32 0x50505 er0 ; add load
- test_h_gr32 0xa5aaaaaa er1 ; add result:
- test_gr_a5a5 2 ; Make sure other general regs not disturbed
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- addx_l_reg32_1:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.l Rs,Rd ; addx with carry initially one
- mov.l #0x50505, er0
- set_carry_flag
- addx.l er0, er1 ; Register operand
- test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_set
- test_h_gr32 0x50505 er0 ; add result:
- test_h_gr32 0xa5aaaaab er1 ; add result:
- test_gr_a5a5 2 ; Make sure other general regs not disturbed
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
-
- addx_l_reg32_rdind:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.l rs8,@eRd ; Addx to register indirect
- mov #long_dest, er0
- mov.l #0x50505, er1
- addx.l er1, @er0
- test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_clear
- test_h_gr32 long_dest er0 ; er0 still contains address
- test_h_gr32 0x50505 er1 ; er1 has the test load
- test_gr_a5a5 2 ; Make sure other general regs not disturbed
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- ;; Now check the result of the add to memory.
- cmp.l #0xf0f0f, @long_dest
- beq .Ll3
- fail
- .Ll3:
- addx_l_reg32_rdpostdec:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.l rs8,@eRd- ; Addx to register post-decrement
- mov #long_dest, er0
- mov.l #0x50505, er1
- addx.l er1, @er0-
- test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_clear
- test_h_gr32 long_dest-4 er0 ; er0 contains address minus one
- test_h_gr32 0x50505 er1 ; er1 contains the test load
- test_gr_a5a5 2 ; Make sure other general regs not disturbed
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- ;; Now check the result of the add to memory.
- cmp.l #0x141414, @long_dest
- beq .Ll4
- fail
- .Ll4:
- addx_l_rsind_reg32:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.l @eRs,rd8 ; Addx from reg indirect to reg
- mov #long_src, er0
- addx.l @er0, er1
- test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_set
- test_h_gr32 long_src er0 ; er0 still contains address
- test_h_gr32 0xa5aaaaaa er1 ; er1 contains the sum
- test_gr_a5a5 2 ; Make sure other general regs not disturbed
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- addx_l_rspostdec_reg32:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.l @eRs-,rd8 ; Addx to register post-decrement
- mov #long_src, er0
- addx.l @er0-, er1
- test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_set
- test_h_gr32 long_src-4 er0 ; er0 contains address minus one
- test_h_gr32 0xa5aaaaaa er1 ; er1 contains the sum
- test_gr_a5a5 2 ; Make sure other general regs not disturbed
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- addx_l_rsind_rdind:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.l @eRs,rd8 ; Addx from reg indirect to reg
- mov #long_src, er0
- mov #long_dest, er1
- addx.l @er0, @er1
- test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_clear
- test_h_gr32 long_src er0 ; er0 still contains src address
- test_h_gr32 long_dest er1 ; er1 still contains dst address
- test_gr_a5a5 2 ; Make sure other general regs not disturbed
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- ;; Now check the result of the add to memory.
- cmp.l #0x191919, @long_dest
- beq .Ll5
- fail
- .Ll5:
- addx_l_rspostdec_rdpostdec:
- set_grs_a5a5 ; Fill all general regs with a fixed pattern
- set_ccr_zero
- ;; addx.l @eRs-,rd8 ; Addx to register post-decrement
- mov #long_src, er0
- mov #long_dest, er1
- addx.l @er0-, @er1-
- test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
- test_ovf_clear
- test_zero_clear
- test_neg_clear
- test_h_gr32 long_src-4 er0 ; er0 contains src address minus one
- test_h_gr32 long_dest-4 er1 ; er1 contains dst address minus one
- test_gr_a5a5 2 ; Make sure other general regs not disturbed
- test_gr_a5a5 3
- test_gr_a5a5 4
- test_gr_a5a5 5
- test_gr_a5a5 6
- test_gr_a5a5 7
- ;; Now check the result of the add to memory.
- cmp.l #0x1e1e1e, @long_dest
- beq .Ll6
- fail
- .Ll6:
- .endif
- pass
- exit 0
|