mirror of
https://github.com/j-core/j-core-ice40.git
synced 2026-02-27 17:13:20 +00:00
431 lines
6.7 KiB
ArmAsm
431 lines
6.7 KiB
ArmAsm
/**************
|
|
Initialization
|
|
**************/
|
|
.global _testmacl
|
|
_testmacl:
|
|
sts.l pr, @-r15
|
|
mov.l _pfail, r13 !fail address
|
|
bra _testgo
|
|
nop
|
|
_pfail: .long _fail
|
|
_testgo:
|
|
|
|
/************************
|
|
MAC.L @Rm+, @Rn+ : basic
|
|
************************/
|
|
_macl:
|
|
mov #0, r0
|
|
ldc r0, sr !S=0
|
|
mov #0x02, r0
|
|
clrmac
|
|
mov.l _pmacldata1, r1
|
|
mov.l _pmacldata2, r2
|
|
mac.l @r2+, @r1+
|
|
ldc r0, sr !S=1, no effect to MAC operation
|
|
sts mach, r3
|
|
sts macl, r4
|
|
mov.l _pmacldata3, 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.l @r2+, @r1+
|
|
clrmac !only check clear timing
|
|
!----
|
|
mac.l @r2+, @r1+
|
|
mac.l @r2+, @r1+
|
|
mac.l @r2+, @r1+
|
|
mac.l @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 _maclend
|
|
nop
|
|
.align 4
|
|
_macldata1:
|
|
.long 0x01234567 !19088743
|
|
.long 0xfffffffd !dummy (-3)
|
|
.long 0x00000002
|
|
.long 0x00000003
|
|
.long 0x00000004
|
|
.long 0x00000005
|
|
_macldata2:
|
|
.long 0x89abcdef !-1985229329
|
|
.long 0x00000002 !dummy (2)
|
|
.long 0x00000006
|
|
.long 0x00000007
|
|
.long 0x00000008
|
|
.long 0x00000009
|
|
_macldata3:
|
|
.long 0xff795e36 !-37895532457343447
|
|
.long 0xc94e4629
|
|
.long 0x00000000 !(2x6)+(3x7)+(4x8)+(5x9)=12+21+28+45=110
|
|
.long 0x0000006e
|
|
.align 4
|
|
_pmacldata1: .long _macldata1
|
|
_pmacldata2: .long _macldata2
|
|
_pmacldata3: .long _macldata3
|
|
_maclend:
|
|
|
|
/***********************************
|
|
MAC.L @Rm+, @Rn+ : value dependency
|
|
***********************************/
|
|
_macl_value:
|
|
mov.l _pmaclsbit, r1
|
|
mov.l _pmaclinih, r2
|
|
mov.l _pmaclinil, r3
|
|
mov.l _pmaclval1, r4
|
|
mov.l _pmaclval2, r5
|
|
mov.l _pmaclmach, r6
|
|
mov.l _pmaclmacl, r7
|
|
mov.l _pmaclcount, 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.l @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 _macl_value_end:
|
|
nop
|
|
|
|
.align 4
|
|
!-----------------------------
|
|
! S=0 00000000 x 00000000
|
|
|
|
! S=0 00000001 x 7fffffff
|
|
! S=0 7fffffff x 00000001
|
|
! S=0 ffffffff x 7fffffff
|
|
! S=0 7fffffff x ffffffff
|
|
|
|
! S=0 00000001 x 80000000
|
|
! S=0 80000000 x 00000001
|
|
! S=0 ffffffff x 80000000
|
|
! S=0 80000000 x ffffffff
|
|
|
|
! S=0 7fffffff x 7fffffff
|
|
! S=0 80000000 x 80000000
|
|
! S=1 7fffffff x 7fffffff
|
|
! S=1 80000000 x 80000000
|
|
|
|
! S=0 7fffffff x 80000000
|
|
! S=0 80000000 x 7fffffff
|
|
! S=1 7fffffff x 80000000
|
|
! S=1 80000000 x 7fffffff
|
|
|
|
! S=0 00000001 x 00000001 + 00007fff:ffffffff
|
|
! S=0 00000001 x ffffffff + ffff8000:00000000
|
|
|
|
! S=1 00000001 x 00000001 + 00007fff:ffffffff
|
|
! S=1 00000001 x ffffffff + ffff8000:00000000
|
|
|
|
! S=1 00000001 x 00000001 + 0007ffff:ffffffff
|
|
! S=1 00000001 x ffffffff + fff80000:00000000
|
|
|
|
_maclsbit: ! 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
|
|
|
|
_maclinih: ! 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 0x00007fff
|
|
.long 0xffff8000
|
|
|
|
.long 0x00007fff
|
|
.long 0xffff8000
|
|
|
|
.long 0x0007ffff
|
|
.long 0xfff80000
|
|
|
|
_maclinil: ! 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 0xffffffff
|
|
.long 0x00000000
|
|
|
|
.long 0xffffffff
|
|
.long 0x00000000
|
|
|
|
.long 0xffffffff
|
|
.long 0x00000000
|
|
|
|
_maclval1: ! R4
|
|
.long 0x00000000
|
|
|
|
.long 0x00000001
|
|
.long 0x7fffffff
|
|
.long 0xffffffff
|
|
.long 0x7fffffff
|
|
|
|
.long 0x00000001
|
|
.long 0x80000000
|
|
.long 0xffffffff
|
|
.long 0x80000000
|
|
|
|
.long 0x7fffffff
|
|
.long 0x80000000
|
|
.long 0x7fffffff
|
|
.long 0x80000000
|
|
|
|
.long 0x7fffffff
|
|
.long 0x80000000
|
|
.long 0x7fffffff
|
|
.long 0x80000000
|
|
|
|
.long 0x00000001
|
|
.long 0x00000001
|
|
|
|
.long 0x00000001
|
|
.long 0x00000001
|
|
|
|
.long 0x00000001
|
|
.long 0x00000001
|
|
|
|
_maclval2: ! R5
|
|
.long 0x00000000
|
|
|
|
.long 0x7fffffff
|
|
.long 0x00000001
|
|
.long 0x7fffffff
|
|
.long 0xffffffff
|
|
|
|
.long 0x80000000
|
|
.long 0x00000001
|
|
.long 0x80000000
|
|
.long 0xffffffff
|
|
|
|
.long 0x7fffffff
|
|
.long 0x80000000
|
|
.long 0x7fffffff
|
|
.long 0x80000000
|
|
|
|
.long 0x80000000
|
|
.long 0x7fffffff
|
|
.long 0x80000000
|
|
.long 0x7fffffff
|
|
|
|
.long 0x00000001
|
|
.long 0xffffffff
|
|
|
|
.long 0x00000001
|
|
.long 0xffffffff
|
|
|
|
.long 0x00000001
|
|
.long 0xffffffff
|
|
|
|
_maclmach: ! R6
|
|
.long 0x00000000
|
|
|
|
.long 0x00000000
|
|
.long 0x00000000
|
|
.long 0xffffffff
|
|
.long 0xffffffff
|
|
|
|
.long 0xffffffff
|
|
.long 0xffffffff
|
|
.long 0x00000000
|
|
.long 0x00000000
|
|
|
|
.long 0x3fffffff
|
|
.long 0x40000000
|
|
.long 0x00007fff
|
|
.long 0x00007fff
|
|
|
|
.long 0xc0000000
|
|
.long 0xc0000000
|
|
.long 0xffff8000
|
|
.long 0xffff8000
|
|
|
|
.long 0x00008000
|
|
.long 0xffff7fff
|
|
|
|
.long 0x00007fff
|
|
.long 0xffff8000
|
|
|
|
.long 0x00007fff
|
|
.long 0xffff8000
|
|
|
|
_maclmacl: ! R7
|
|
.long 0x00000000
|
|
|
|
.long 0x7fffffff
|
|
.long 0x7fffffff
|
|
.long 0x80000001
|
|
.long 0x80000001
|
|
|
|
.long 0x80000000
|
|
.long 0x80000000
|
|
.long 0x80000000
|
|
.long 0x80000000
|
|
|
|
.long 0x00000001
|
|
.long 0x00000000
|
|
.long 0xffffffff
|
|
.long 0xffffffff
|
|
|
|
.long 0x80000000
|
|
.long 0x80000000
|
|
.long 0x00000000
|
|
.long 0x00000000
|
|
|
|
.long 0x00000000
|
|
.long 0xffffffff
|
|
|
|
.long 0xffffffff
|
|
.long 0x00000000
|
|
|
|
.long 0xffffffff
|
|
.long 0x00000000
|
|
|
|
!-----------------------------
|
|
.align 4
|
|
_pmaclsbit: .long _maclsbit
|
|
_pmaclinih: .long _maclinih
|
|
_pmaclinil: .long _maclinil
|
|
_pmaclval1: .long _maclval1
|
|
_pmaclval2: .long _maclval2
|
|
_pmaclmach: .long _maclmach
|
|
_pmaclmacl: .long _maclmacl
|
|
_pmaclcount: .long (_maclinih - _maclsbit)/4
|
|
_macl_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 0x00000062
|
|
|
|
/**********
|
|
You Failed
|
|
**********/
|
|
_fail:
|
|
mov.l _pfail_value, r0
|
|
mov.l _pfail_value, r1
|
|
bra _fail
|
|
nop
|
|
.align 4
|
|
_pfail_value: .long 0x88888888
|
|
|
|
.end
|