1
0
mirror of https://github.com/j-core/j-core-ice40.git synced 2026-02-27 09:09:32 +00:00
Files
j-core.j-core-ice40/testrom/tests/testmulconf.s
2019-03-03 19:35:20 -05:00

1068 lines
18 KiB
ArmAsm

/**************
Initialization
**************/
.global _testmulconf
_testmulconf:
sts.l pr, @-r15
mov.l _pfail, r13 !fail address
bra _testgo
nop
_pfail: .long _fail
_testgo:
/**********************************
Conflict Combinations
----------------------------------
before : LDS.L(H) 1 done
LDS.L(L) 2 done
STS.L(H) 3 done
STS.L(L) 4 done
MAC.W 5
MAC.L 6
DMULS.L 7
DMULU.L 8
MUL.L 9
MULS.W A
MULU.W B
---------------before=123456789AB
after : STS vvvvv
STS.L vvvvv
CLRMAC vvvv
LDS vvvv
LDS.L vvvv
MAC.W vvvv
MAC.L vvvv
DMULS.L vvvv
DMULU.L vvvv
MUL.L vvvv
MULS.W vvvv
MULU.W vvvv
**********************************/
!---------------------
!===[5]===============
!---------------------
mov.l _pram20, r4
mov.l _pram21, r5
mov #3, r0
mov.w r0, @r4
add #2, r4
mov #6, r0
mov.w r0, @r4
add #-2, r4
clrmac
mov #0xff, r0
lds r0, mach ! MAC=FFFFFFFF 00000000
mac.w @r4+, @r4+ ! <--------
sts.l mach, @-r5 ! <--------
mov.l @r5, r0
cmp/eq #0xff, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #18, r0
bt .+6
jmp @r13
nop
!----
mov.l _pram20, r4
mov.l _pram21, r5
mov #4, r0
mov.w r0, @r4
add #2, r4
mov #8, r0
mov.w r0, @r4
add #-2, r4
clrmac
mov #0xff, r0
lds r0, mach ! MAC=FFFFFFFF 00000000
mac.w @r4+, @r4+ ! <--------
sts.l macl, @-r5 ! <--------
mov.l @r5, r0
cmp/eq #32, r0
bt .+6
jmp @r13
nop
sts mach, r0
cmp/eq #0xff, r0
bt .+6
jmp @r13
nop
!---------------------
mov.l _pram20, r4
mov #4, r0
mov.w r0, @r4
add #2, r4
mov #6, r0
mov.w r0, @r4
add #-2, r4
clrmac
mac.w @r4+, @r4+ ! <--------
sts mach, r0 ! <--------
cmp/eq #0, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #24, r0
bt .+6
jmp @r13
nop
!----
mov.l _pram20, r4
mov #7, r0
mov.w r0, @r4
add #2, r4
mov #8, r0
mov.w r0, @r4
add #-2, r4
clrmac
mac.w @r4+, @r4+ ! <--------
sts macl, r0 ! <--------
cmp/eq #56, r0
bt .+6
jmp @r13
nop
sts mach, r0
cmp/eq #0, r0
bt .+6
jmp @r13
nop
!---------------------
bra skip3
nop
.align 4
_pram20: .long _ram0+128
_pram21: .long _ram0+128+0x10
skip3:
!---------------------
!===[4]===============
!---------------------
mov #0x55, r0
mov.l _pram10, r4
add #4, r4
mov #8, r1
mov #9, r2
lds r0, mach
lds r0, macl
sts.l macl, @-r4 ! <--------
mulu.w r2, r1 ! <--------
sts mach, r0
cmp/eq #0x55, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #72, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0xaa, r0
mov.l _pram10, r4
add #4, r4
mov #7, r1
mov #-8, r2
lds r0, mach
lds r0, macl
sts.l macl, @-r4 ! <--------
muls.w r2, r1 ! <--------
sts mach, r0
cmp/eq #0xaa, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #-56, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0x55, r0
mov.l _pram10, r4
add #4, r4
mov #6, r1
mov #7, r2
lds r0, mach
lds r0, macl
sts.l macl, @-r4 ! <--------
mul.l r2, r1 ! <--------
sts mach, r0
cmp/eq #0x55, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #42, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0xaa, r0
mov.l _pram10, r4
mov #5, r1
mov #6, r2
lds r0, mach
lds r0, macl
sts.l macl, @-r4 ! <--------
dmulu.l r2, r1 ! <--------
sts mach, r0
cmp/eq #0x00, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #30, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0xaa, r0
mov.l _pram10, r4
mov #5, r1
mov #-6, r2
lds r0, mach
lds r0, macl
sts.l macl, @-r4 ! <--------
dmuls.l r2, r1 ! <--------
sts mach, r0
cmp/eq #0xff, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #-30, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0xff, r1
mov.l _pram10, r4
add #4, r4
mov.l r1, @r4
lds r1, mach
mov #0, r0 ! S=0
ldc r0, sr
lds r1, macl ! MAC=ffffffff ffffffff
sts.l macl, @-r4 ! <--------
mac.l @r4+, @r4+ ! <--------
sts mach, r0 ! MAC=00000000 00000000
cmp/eq #0x00, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #0x00, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0xff, r1
mov.l _pram10, r4
add #4, r4
lds r1, mach
mov #0, r0 ! S=0
ldc r0, sr
lds r1, macl ! MAC=ffffffff ffffffff
sts.l macl, @-r4 ! <--------
mac.w @r4+, @r4+ ! <--------
sts mach, r0 ! MAC=00000000 00000000
cmp/eq #0x00, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #0x00, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0xaa, r0
mov.l _pram10, r4
add #4, r4
lds r0, macl
mov r4, r5
mov #0x55, r1
mov.l r1, @r5
sts.l macl, @-r4 ! <--------
lds.l @r5+, macl ! <--------
sts macl, r0
cmp/eq #0x55, r0
bt .+6
jmp @r13
nop
mov.l @r4+, r0
cmp/eq #0xaa, r0
bt .+6
jmp @r13
nop
mov.l @r4+, r0
cmp/eq #0x55, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0xaa, r0
mov #0x55, r1
mov.l _pram10, r4
add #4, r4
lds r0, macl
sts.l macl, @-r4 ! <--------
lds r1, macl ! <--------
sts macl, r0
cmp/eq #0x55, r0
bt .+6
jmp @r13
nop
mov.l @r4+, r0
cmp/eq #0xaa, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0x55, r0
mov.l _pram10, r4
add #4, r4
lds r0, macl
sts.l macl, @-r4 ! <--------
clrmac ! <--------
sts macl, r0
cmp/eq #0x00, r0
bt .+6
jmp @r13
nop
mov.l @r4+, r0
cmp/eq #0x55, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0xaa, r0
mov.l _pram10, r4
add #8, r4
lds r0, macl
sts.l macl, @-r4 ! <--------
sts.l macl, @-r4 ! <--------
sts macl, r1
cmp/eq r1, r0
bt .+6
jmp @r13
nop
mov.l @r4+, r2
cmp/eq r2, r0
bt .+6
jmp @r13
nop
mov.l @r4+, r3
cmp/eq r3, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0xaa, r0
mov.l _pram10, r4
add #4, r4
lds r0, macl
sts.l macl, @-r4 ! <--------
sts macl, r1 ! <--------
cmp/eq r1, r0
bt .+6
jmp @r13
nop
mov.l @r4, r2
cmp/eq r2, r0
bt .+6
jmp @r13
nop
!---------------------
!===[3]===============
!---------------------
mov #0x55, r0
mov.l _pram10, r4
add #4, r4
mov #8, r1
mov #9, r2
lds r0, mach
sts.l mach, @-r4 ! <--------
mulu.w r2, r1 ! <--------
sts mach, r0
cmp/eq #0x55, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #72, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0xaa, r0
mov.l _pram10, r4
add #4, r4
mov #7, r1
mov #-8, r2
lds r0, mach
sts.l mach, @-r4 ! <--------
muls.w r2, r1 ! <--------
sts mach, r0
cmp/eq #0xaa, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #-56, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0x55, r0
mov.l _pram10, r4
add #4, r4
mov #6, r1
mov #7, r2
lds r0, mach
sts.l mach, @-r4 ! <--------
mul.l r2, r1 ! <--------
sts mach, r0
cmp/eq #0x55, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #42, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0xaa, r0
mov.l _pram10, r4
mov #5, r1
mov #6, r2
lds r0, mach
sts.l mach, @-r4 ! <--------
dmulu.l r2, r1 ! <--------
sts mach, r0
cmp/eq #0x00, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #30, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0xaa, r0
mov.l _pram10, r4
mov #5, r1
mov #-6, r2
lds r0, mach
sts.l mach, @-r4 ! <--------
dmuls.l r2, r1 ! <--------
sts mach, r0
cmp/eq #0xff, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #-30, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0xff, r1
mov.l _pram10, r4
add #4, r4
mov.l r1, @r4
lds r1, mach
mov #0, r0 ! S=0
ldc r0, sr
lds r0, macl ! MAC=ffffffff 00000000
sts.l mach, @-r4 ! <--------
mac.l @r4+, @r4+ ! <--------
sts mach, r0 ! MAC=ffffffff 00000001
cmp/eq #0xff, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #0x01, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0xff, r1
mov.l _pram10, r4
add #4, r4
lds r1, mach
mov #0, r0 ! S=0
ldc r0, sr
lds r0, macl ! MAC=ffffffff 00000000
sts.l mach, @-r4 ! <--------
mac.w @r4+, @r4+ ! <--------
sts mach, r0 ! MAC=ffffffff 00000001
cmp/eq #0xff, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #0x01, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0xaa, r0
mov.l _pram10, r4
add #4, r4
lds r0, mach
mov r4, r5
mov #0x55, r1
mov.l r1, @r5
sts.l mach, @-r4 ! <--------
lds.l @r5+, mach ! <--------
sts mach, r0
cmp/eq #0x55, r0
bt .+6
jmp @r13
nop
mov.l @r4+, r0
cmp/eq #0xaa, r0
bt .+6
jmp @r13
nop
mov.l @r4+, r0
cmp/eq #0x55, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0xaa, r0
mov #0x55, r1
mov.l _pram10, r4
add #4, r4
lds r0, mach
sts.l mach, @-r4 ! <--------
lds r1, mach ! <--------
sts mach, r0
cmp/eq #0x55, r0
bt .+6
jmp @r13
nop
mov.l @r4+, r0
cmp/eq #0xaa, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0x55, r0
mov.l _pram10, r4
add #4, r4
lds r0, mach
sts.l mach, @-r4 ! <--------
clrmac ! <--------
sts mach, r0
cmp/eq #0x00, r0
bt .+6
jmp @r13
nop
mov.l @r4+, r0
cmp/eq #0x55, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0xaa, r0
mov.l _pram10, r4
add #8, r4
lds r0, mach
sts.l mach, @-r4 ! <--------
sts.l mach, @-r4 ! <--------
sts mach, r1
cmp/eq r1, r0
bt .+6
jmp @r13
nop
mov.l @r4+, r2
cmp/eq r2, r0
bt .+6
jmp @r13
nop
mov.l @r4+, r3
cmp/eq r3, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0xaa, r0
mov.l _pram10, r4
add #4, r4
lds r0, mach
sts.l mach, @-r4 ! <--------
sts mach, r1 ! <--------
cmp/eq r1, r0
bt .+6
jmp @r13
nop
mov.l @r4, r2
cmp/eq r2, r0
bt .+6
jmp @r13
nop
!---------------------
!---------------------
bra skip2
nop
.align 4
_pram10: .long _ram0+128
_pram11: .long _ram0+128+0x10
skip2:
!---------------------
!===[2]===============
!---------------------
mov #0x55, r0
mov.l _pram00, r4
mov.l r0, @r4
mov #8, r1
mov #9, r2
lds r0, mach
lds.l @r4+, macl ! <--------
mulu.w r2, r1 ! <--------
sts mach, r0
cmp/eq #0x55, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #72, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0xaa, r0
mov.l _pram00, r4
mov.l r0, @r4
mov #7, r1
mov #-8, r2
lds r0, mach
lds.l @r4+, macl ! <--------
muls.w r2, r1 ! <--------
sts mach, r0
cmp/eq #0xaa, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #-56, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0x55, r0
mov.l _pram00, r4
mov.l r0, @r4
mov #6, r1
mov #7, r2
lds r0, mach
lds.l @r4+, macl ! <--------
mul.l r2, r1 ! <--------
sts mach, r0
cmp/eq #0x55, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #42, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0xaa, r0
mov.l _pram00, r4
mov.l r0, @r4
mov #5, r1
mov #6, r2
lds r0, mach
lds.l @r4+, macl ! <--------
dmulu.l r2, r1 ! <--------
sts mach, r0
cmp/eq #0, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #30, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0xaa, r0
mov.l _pram00, r4
mov.l r0, @r4
mov #5, r1
mov #-6, r2
lds r0, mach
lds.l @r4+, macl ! <--------
dmuls.l r2, r1 ! <--------
sts mach, r0
cmp/eq #0xff, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #-30, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0, r0
mov #4, r1
mov #5, r2
mov.l _pram00, r4
mov.l r0, @r4
add #4, r4
mov.l r1, @r4
add #4, r4
mov.l r2, @r4
mov.l _pram00, r4
lds r0, mach ! R0=0
ldc r0, sr ! S=0
lds.l @r4+, macl ! <--------
mac.l @r4+, @r4+ ! <--------
sts mach, r0
cmp/eq #0, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #20, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0, r0
mov #4, r1
mov #5, r2
mov.l _pram00, r4
mov.l r0, @r4
add #4, r4
mov.w r1, @r4
add #2, r4
mov.w r2, @r4
mov.l _pram00, r4
lds r0, mach ! R0=0
ldc r0, sr ! S=0
lds.l @r4+, macl ! <--------
mac.w @r4+, @r4+ ! <--------
sts mach, r0
cmp/eq #0, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #20, r0
bt .+6
jmp @r13
nop
!---------------------
mov.l _pram00, r4
mov #0xaa, r0
mov.l r0, @r4
mov r4, r5
add #4, r5
mov #0x55, r0
mov.l r0, @r5
lds.l @r4+, macl ! <--------
lds.l @r5+, macl ! <--------
sts macl, r0
cmp/eq #0x55, r0
bt .+6
jmp @r13
nop
!---------------------
mov.l _pram00, r4
mov #0x55, r0
mov.l r0, @r4
mov #0xaa, r1
lds.l @r4+, macl ! <--------
lds r1, macl ! <--------
sts macl, r2
cmp/eq r2, r1
bt .+6
jmp @r13
nop
!---------------------
mov.l _pram00, r4
mov #0x55, r0
mov.l r0, @r4
mov #0x00, r1
lds.l @r4+, macl
clrmac ! <--------
sts macl, r2 ! <--------
cmp/eq r2, r1
bt .+6
jmp @r13
nop
!---------------------
mov.l _pram00, r4
mov #0x55, r0
mov.l r0, @r4
mov.l _pram01, r5
lds.l @r4+, macl ! <--------
sts.l macl, @-r5 ! <--------
mov.l @r5+, r0
cmp/eq #0x55, r0
bt .+6
jmp @r13
nop
!---------------------
mov.l _pram00, r4
mov #0xaa, r0
mov.l r0, @r4
lds.l @r4+, macl ! <--------
sts macl, r0 ! <--------
cmp/eq #0xaa, r0
bt .+6
jmp @r13
nop
!---------------------
!===[1]===============
!---------------------
mov #0x55, r0
mov.l _pram00, r4
mov.l r0, @r4
mov #8, r1
mov #9, r2
lds.l @r4+, mach ! <--------
mulu.w r2, r1 ! <--------
sts mach, r0
cmp/eq #0x55, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #72, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0xaa, r0
mov.l _pram00, r4
mov.l r0, @r4
mov #7, r1
mov #-8, r2
lds.l @r4+, mach ! <--------
muls.w r2, r1 ! <--------
sts mach, r0
cmp/eq #0xaa, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #-56, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0x55, r0
mov.l _pram00, r4
mov.l r0, @r4
mov #6, r1
mov #7, r2
lds.l @r4+, mach ! <--------
mul.l r2, r1 ! <--------
sts mach, r0
cmp/eq #0x55, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #42, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0xaa, r0
mov.l _pram00, r4
mov.l r0, @r4
mov #5, r1
mov #6, r2
lds.l @r4+, mach ! <--------
dmulu.l r2, r1 ! <--------
sts mach, r0
cmp/eq #0, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #30, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0xaa, r0
mov.l _pram00, r4
mov.l r0, @r4
mov #5, r1
mov #-6, r2
lds.l @r4+, mach ! <--------
dmuls.l r2, r1 ! <--------
sts mach, r0
cmp/eq #0xff, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #-30, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0, r0
mov #4, r1
mov #5, r2
mov.l _pram00, r4
mov.l r0, @r4
add #4, r4
mov.l r1, @r4
add #4, r4
mov.l r2, @r4
mov.l _pram00, r4
lds r0, macl ! R0=0
ldc r0, sr ! S=0
lds.l @r4+, mach ! <--------
mac.l @r4+, @r4+ ! <--------
sts mach, r0
cmp/eq #0, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #20, r0
bt .+6
jmp @r13
nop
!---------------------
mov #0, r0
mov #4, r1
mov #5, r2
mov.l _pram00, r4
mov.l r0, @r4
add #4, r4
mov.w r1, @r4
add #2, r4
mov.w r2, @r4
mov.l _pram00, r4
lds r0, macl ! R0=0
ldc r0, sr ! S=0
lds.l @r4+, mach ! <--------
mac.w @r4+, @r4+ ! <--------
sts mach, r0
cmp/eq #0, r0
bt .+6
jmp @r13
nop
sts macl, r0
cmp/eq #20, r0
bt .+6
jmp @r13
nop
!---------------------
mov.l _pram00, r4
mov #0xaa, r0
mov.l r0, @r4
mov r4, r5
add #4, r5
mov #0x55, r0
mov.l r0, @r5
lds.l @r4+, mach ! <--------
lds.l @r5+, mach ! <--------
sts mach, r0
cmp/eq #0x55, r0
bt .+6
jmp @r13
nop
!---------------------
mov.l _pram00, r4
mov #0x55, r0
mov.l r0, @r4
mov #0xaa, r1
lds.l @r4+, mach ! <--------
lds r1, mach ! <--------
sts mach, r2
cmp/eq r2, r1
bt .+6
jmp @r13
nop
!---------------------
mov.l _pram00, r4
mov #0x55, r0
mov.l r0, @r4
mov #0x00, r1
lds.l @r4+, mach
clrmac ! <--------
sts mach, r2 ! <--------
cmp/eq r2, r1
bt .+6
jmp @r13
nop
!---------------------
mov.l _pram00, r4
mov #0x55, r0
mov.l r0, @r4
mov.l _pram01, r5
lds.l @r4+, mach ! <--------
sts.l mach, @-r5 ! <--------
mov.l @r5+, r0
cmp/eq #0x55, r0
bt .+6
jmp @r13
nop
!---------------------
mov.l _pram00, r4
mov #0xaa, r0
mov.l r0, @r4
lds.l @r4+, mach ! <--------
sts mach, r0 ! <--------
cmp/eq #0xaa, r0
bt .+6
jmp @r13
nop
!---------------------
!-----------------------------
bra _testfinish
nop
!-----------------------------
.align 4
_pram00: .long _ram0+128
_pram01: .long _ram0+128+0x10
!-----------------------------
_testfinish:
/**************
Congratulations
**************/
_pass:
lds.l @r15+, pr
mov.l _ppass_value, r0
mov.l _ppass_addr, r1
mov.l r0, @r1
rts
nop
.align 4
_ppass_addr: .long 0xABCD0000
_ppass_value: .long 0x00000047
/**********
You Failed
**********/
_fail:
mov.l _pfail_value, r0
mov.l _pfail_value, r1
bra _fail
nop
.align 4
_pfail_value: .long 0x88888888
.end