1
0
mirror of https://github.com/j-core/j-core-ice40.git synced 2026-02-28 01:16:29 +00:00
Files
j-core.j-core-ice40/testrom/tests/testmacw.s
2019-03-03 19:35:20 -05:00

431 lines
6.3 KiB
ArmAsm

/**************
Initialization
**************/
.global _testmacw
_testmacw:
sts.l pr, @-r15
mov.l _pfail, r13 !fail address
bra _testgo
nop
_pfail: .long _fail
_testgo:
/************************
MAC.W @Rm+, @Rn+ : basic
************************/
_macw:
mov #0, r0
ldc r0, sr !S=0
mov #0x02, r0
clrmac
mov.l _pmacwdata1, r1
mov.l _pmacwdata2, r2
mac.w @r2+, @r1+
ldc r0, sr !S=1, no effect to MAC operation
sts mach, r3
sts macl, r4
mov.l _pmacwdata3, r5
mov.l @r5+, r6
mov.l @r5+, r7
!----
cmp/eq r6, r3
bt .+6
jmp @r13
nop
!----
cmp/eq r7, r4
bt .+6
jmp @r13
nop
!----
mov #0, r0
ldc r0, sr !S=0
mac.w @r2+, @r1+
clrmac !only check clear timing
!----
mac.w @r2+, @r1+
mac.w @r2+, @r1+
mac.w @r2+, @r1+
mac.w @r2+, @r1+
sts macl, r4
sts mach, r3
mov.l @r5+, r6
mov.l @r5+, r7
!----
cmp/eq r6, r3
bt .+6
jmp @r13
nop
!----
cmp/eq r7, r4
bt .+6
jmp @r13
nop
!----
bra _macwend
nop
.align 4
_macwdata1:
.word 0x1234 !4660
.word 0xfffd !dummy (-3)
.word 0x0002
.word 0x0003
.word 0x0004
.word 0x0005
_macwdata2:
.word 0xabcd !-21555
.word 0x0002 !dummy (2)
.word 0x0006
.word 0x0007
.word 0x0008
.word 0x0009
_macwdata3:
.long 0xFFFFFFFF !-100446300
.long 0xFA034FA4
.long 0x00000000 !(2x6)+(3x7)+(4x8)+(5x9)=12+21+28+45=110
.long 0x0000006e
.align 4
_pmacwdata1: .long _macwdata1
_pmacwdata2: .long _macwdata2
_pmacwdata3: .long _macwdata3
_macwend:
/***********************************
MAC.W @Rm+, @Rn+ : value dependency
***********************************/
_macw_value:
mov.l _pmacwsbit, r1
mov.l _pmacwinih, r2
mov.l _pmacwinil, r3
mov.l _pmacwval1, r4
mov.l _pmacwval2, r5
mov.l _pmacwmach, r6
mov.l _pmacwmacl, r7
mov.l _pmacwcount, r8
_mac_value1:
mov.l @r1+, r0
ldc r0, sr
mov.l @r2+, r0
lds r0, mach
mov.l @r3+, r0
lds r0, macl
mac.w @r5+, @r4+
sts mach, r9
sts macl, r10
!----
mov.l @r6+, r0
cmp/eq r0, r9
bt .+6
jmp @r13
nop
!----
mov.l @r7+, r0
cmp/eq r0, r10
bt .+6
jmp @r13
nop
!----
add #-1, r8
cmp/pl r8
bt _mac_value1
!----
bra _macw_value_end:
nop
.align 4
!-----------------------------
! S=0 0000 x 0000
! S=0 0001 x 7fff
! S=0 7fff x 0001
! S=0 ffff x 7fff
! S=0 7fff x ffff
! S=0 0001 x 8000
! S=0 8000 x 0001
! S=0 ffff x 8000
! S=0 8000 x ffff
! S=0 7fff x 7fff
! S=0 8000 x 8000
! S=1 7fff x 7fff
! S=1 8000 x 8000
! S=0 7fff x 8000
! S=0 8000 x 7fff
! S=1 7fff x 8000
! S=1 8000 x 7fff
! S=0 0001 x 0001 + 00000000:7fffffff
! S=0 0001 x ffff + ffffffff:80000000
! S=1 0001 x 0001 + 00000000:7fffffff
! S=1 0001 x ffff + ffffffff:80000000
! S=1 0001 x 0001 + 00000006:7fffffff
! S=1 0001 x ffff + 0000000a:80000000
_macwsbit: ! R1
.long 0x00000000 ! S=0
.long 0x00000000 ! S=0
.long 0x00000000 ! S=0
.long 0x00000000 ! S=0
.long 0x00000000 ! S=0
.long 0x00000000 ! S=0
.long 0x00000000 ! S=0
.long 0x00000000 ! S=0
.long 0x00000000 ! S=0
.long 0x00000000 ! S=0
.long 0x00000000 ! S=0
.long 0x00000002 ! S=1
.long 0x00000002 ! S=1
.long 0x00000000 ! S=0
.long 0x00000000 ! S=0
.long 0x00000002 ! S=1
.long 0x00000002 ! S=1
.long 0x00000000 ! S=0
.long 0x00000000 ! S=0
.long 0x00000002 ! S=1
.long 0x00000002 ! S=1
.long 0x00000002 ! S=1
.long 0x00000002 ! S=1
_macwinih: ! R2
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0xffffffff
.long 0x00000000
.long 0xffffffff
.long 0x00000006
.long 0x0000000a
_macwinil: ! R3
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x7fffffff
.long 0x80000000
.long 0x7fffffff
.long 0x80000000
.long 0x7fffffff
.long 0x80000000
_macwval1: ! R4
.word 0x0000
.word 0x0001
.word 0x7fff
.word 0xffff
.word 0x7fff
.word 0x0001
.word 0x8000
.word 0xffff
.word 0x8000
.word 0x7fff
.word 0x8000
.word 0x7fff
.word 0x8000
.word 0x7fff
.word 0x8000
.word 0x7fff
.word 0x8000
.word 0x0001
.word 0x0001
.word 0x0001
.word 0x0001
.word 0x0001
.word 0x0001
_macwval2: ! R5
.word 0x0000
.word 0x7fff
.word 0x0001
.word 0x7fff
.word 0xffff
.word 0x8000
.word 0x0001
.word 0x8000
.word 0xffff
.word 0x7fff
.word 0x8000
.word 0x7fff
.word 0x8000
.word 0x8000
.word 0x7fff
.word 0x8000
.word 0x7fff
.word 0x0001
.word 0xffff
.word 0x0001
.word 0xffff
.word 0x0001
.word 0xffff
_macwmach: ! R6
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0xffffffff
.long 0xffffffff
.long 0xffffffff
.long 0xffffffff
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0xffffffff
.long 0xffffffff
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0xffffffff
.long 0x00000001
.long 0xffffffff
.long 0x00000007
.long 0x0000000b
_macwmacl: ! R7
.long 0x00000000
.long 0x00007fff
.long 0x00007fff
.long 0xffff8001
.long 0xffff8001
.long 0xffff8000
.long 0xffff8000
.long 0x00008000
.long 0x00008000
.long 0x3fff0001
.long 0x40000000
.long 0x3fff0001
.long 0x40000000
.long 0xc0008000
.long 0xc0008000
.long 0xc0008000
.long 0xc0008000
.long 0x80000000
.long 0x7fffffff
.long 0x7fffffff
.long 0x80000000
.long 0x7fffffff
.long 0x80000000
!-----------------------------
.align 4
_pmacwsbit: .long _macwsbit
_pmacwinih: .long _macwinih
_pmacwinil: .long _macwinil
_pmacwval1: .long _macwval1
_pmacwval2: .long _macwval2
_pmacwmach: .long _macwmach
_pmacwmacl: .long _macwmacl
_pmacwcount: .long (_macwinih - _macwsbit)/4
_macw_value_end:
/**************
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 0x00000061
/**********
You Failed
**********/
_fail:
mov.l _pfail_value, r0
mov.l _pfail_value, r1
bra _fail
nop
.align 4
_pfail_value: .long 0x88888888
.end