mirror of
https://github.com/j-core/j-core-ice40.git
synced 2026-02-28 01:16:29 +00:00
660 lines
8.9 KiB
ArmAsm
660 lines
8.9 KiB
ArmAsm
/**************
|
|
Initialization
|
|
**************/
|
|
.global _testmov
|
|
_testmov:
|
|
sts.l pr, @-r15
|
|
mov.l _pfail, r13 !fail address
|
|
bra _testgo
|
|
nop
|
|
_pfail: .long _fail
|
|
_testgo:
|
|
|
|
/******************
|
|
LDC Rm, SR/GBR/VBR
|
|
STC SR/GBR/VBR, Rn
|
|
******************/
|
|
_ldcstc:
|
|
mov #0xff, r0
|
|
mov.l _p01234567, r1
|
|
mov.l _p89abcdef, r2
|
|
ldc r0, sr
|
|
mov.l _p000003f3, r0
|
|
stc sr, r3
|
|
ldc r1, gbr
|
|
stc gbr, r4
|
|
ldc r2, vbr
|
|
stc vbr, r5
|
|
!-----
|
|
cmp/eq r3, r0
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!-----
|
|
cmp/eq r4, r1
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!-----
|
|
cmp/eq r5, r2
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
|
|
/********************
|
|
CLRMAC
|
|
LDS Rm, MACH/MACL/PR
|
|
STS MACH/MACL/PR, Rn
|
|
********************/
|
|
_ldssts:
|
|
clrmac
|
|
mov.l _p01234567, r0
|
|
lds r0, mach
|
|
mov.l _p89abcdef, r1
|
|
lds r1, macl
|
|
mov.l _p55aa55aa, r2
|
|
lds r2, pr
|
|
sts mach, r3
|
|
sts macl, r4
|
|
sts pr, r5
|
|
!-----
|
|
cmp/eq r3, r0
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
cmp/eq r4, r1
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
cmp/eq r5, r2
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
|
|
/****************
|
|
LDS.L @Rm+, MACH
|
|
STS.L MACH, @-Rn
|
|
****************/
|
|
_ldslstsl:
|
|
clrmac
|
|
mov.l _pram0, r1
|
|
mov.l _pram0_16, r2
|
|
mov.l _p01234567, r0
|
|
mov.l r0, @r1
|
|
!----
|
|
lds.l @r1+, mach
|
|
sts.l mach, @-r2
|
|
!----
|
|
sts mach, r3
|
|
cmp/eq r3, r0
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.l @r2, r3
|
|
cmp/eq r3, r0
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.l _pram0_4, r4
|
|
cmp/eq r4, r1
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.l _pram0_12, r5 !_pram0+16-4
|
|
cmp/eq r5, r2
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
|
|
/****************
|
|
LDS.L @Rm+, MACL
|
|
STS.L MACL, @-Rn
|
|
****************/
|
|
clrmac
|
|
mov.l _pram0, r1
|
|
mov.l _pram0_16, r2
|
|
mov.l _p89abcdef, r0
|
|
mov.l r0, @r1
|
|
!----
|
|
lds.l @r1+, macl
|
|
sts.l macl, @-r2
|
|
!----
|
|
sts macl, r3
|
|
cmp/eq r3, r0
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.l @r2, r3
|
|
cmp/eq r3, r0
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.l _pram0_4, r4
|
|
cmp/eq r4, r1
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.l _pram0_12, r5 !_pram0+16-4
|
|
cmp/eq r5, r2
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
|
|
/**************
|
|
LDS.L @Rm+, PR
|
|
STS.L PR, @-Rn
|
|
**************/
|
|
mov.l _pram0, r1
|
|
mov.l _pram0_16, r2
|
|
mov.l _p11223344, r0
|
|
mov.l r0, @r1
|
|
!----
|
|
lds.l @r1+, pr
|
|
sts.l pr, @-r2
|
|
!----
|
|
sts pr, r3
|
|
cmp/eq r3, r0
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.l @r2, r3
|
|
cmp/eq r3, r0
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.l _pram0_4, r4
|
|
cmp/eq r4, r1
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.l _pram0_12, r5 !_pram0+16-4
|
|
cmp/eq r5, r2
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
|
|
/**************
|
|
LDC.L @Rm+, SR
|
|
STC.L SR, @-Rn
|
|
**************/
|
|
_ldclstcl:
|
|
mov #0, r0
|
|
ldc r0, sr
|
|
mov.l _pram0, r1
|
|
mov.l _pram0_16, r2
|
|
mov #0xff, r0
|
|
mov.l r0, @r1
|
|
mov.l _p000003f3, r0
|
|
!----
|
|
ldc.l @r1+, sr
|
|
stc.l sr, @-r2
|
|
!----
|
|
stc sr, r3
|
|
cmp/eq r3, r0
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.l @r2, r3
|
|
cmp/eq r3, r0
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.l _pram0_4, r4
|
|
cmp/eq r4, r1
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.l _pram0_12, r5 !_pram0+16-4
|
|
cmp/eq r5, r2
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
|
|
/***************
|
|
LDC.L @Rm+,GBR
|
|
STC.L GBR, @-Rn
|
|
***************/
|
|
mov #0, r0
|
|
ldc r0, gbr
|
|
mov.l _pram0, r1
|
|
mov.l _pram0_16, r2
|
|
mov.l _p11223344, r0
|
|
mov.l r0, @r1
|
|
!----
|
|
ldc.l @r1+, gbr
|
|
stc.l gbr, @-r2
|
|
!----
|
|
stc gbr, r3
|
|
cmp/eq r3, r0
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.l @r2, r3
|
|
cmp/eq r3, r0
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.l _pram0_4, r4
|
|
cmp/eq r4, r1
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.l _pram0_12, r5 !_pram0+16-4
|
|
cmp/eq r5, r2
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
|
|
/***************
|
|
LDC.L @Rm+,VBR
|
|
STC.L VBR, @-Rn
|
|
***************/
|
|
mov #0, r0
|
|
ldc r0, vbr
|
|
mov.l _pram0, r1
|
|
mov.l _pram0_16, r2
|
|
mov.l _p89abcdef, r0
|
|
mov.l r0, @r1
|
|
!----
|
|
ldc.l @r1+, vbr
|
|
stc.l vbr, @-r2
|
|
!----
|
|
stc vbr, r3
|
|
cmp/eq r3, r0
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.l @r2, r3
|
|
cmp/eq r3, r0
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.l _pram0_4, r4
|
|
cmp/eq r4, r1
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.l _pram0_12, r5 !_pram0+16-4
|
|
cmp/eq r5, r2
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
|
|
/**************
|
|
MOV.L Rm, @-Rn
|
|
**************/
|
|
_movlramr:
|
|
mov.l _pram0, r1
|
|
mov.l _paabbccdd, r0
|
|
!----
|
|
mov r1, r2
|
|
add #4, r2
|
|
mov.l r0, @-r2
|
|
!----
|
|
cmp/eq r1, r2
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.l @r1, r3
|
|
cmp/eq r3, r0
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
|
|
/**************
|
|
MOV.W Rm, @-Rn
|
|
**************/
|
|
_movwramr:
|
|
mov.l _pram0, r1
|
|
mov.w _paabb, r0
|
|
!----
|
|
mov r1, r2
|
|
add #2, r2
|
|
mov.w r0, @-r2
|
|
!----
|
|
cmp/eq r1, r2
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.w @r1, r3
|
|
cmp/eq r3, r0
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
|
|
/**************
|
|
MOV.B Rm, @-Rn
|
|
**************/
|
|
_movbramr:
|
|
mov.l _pram0, r1
|
|
mov #0xaa, r0
|
|
!----
|
|
mov r1, r2
|
|
add #1, r2
|
|
mov.b r0, @-r2
|
|
!----
|
|
cmp/eq r1, r2
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.b @r1, r3
|
|
cmp/eq r3, r0
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
|
|
/**************
|
|
MOV.L @Rm+, Rn
|
|
**************/
|
|
_movlarpr:
|
|
mov.l _pram0, r1
|
|
mov.l _paabbccdd, r0
|
|
mov.l r0, @r1
|
|
!----
|
|
mov r1, r2
|
|
mov.l @r2+, r3
|
|
!----
|
|
add #4, r1
|
|
cmp/eq r1, r2
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
cmp/eq r3, r0
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
|
|
/**************
|
|
MOV.W @Rm+, Rn
|
|
**************/
|
|
_movwarpr:
|
|
mov.l _pram0, r1
|
|
mov.w _paabb, r0
|
|
mov.w r0, @r1
|
|
!----
|
|
mov r1, r2
|
|
mov.w @r2+, r3
|
|
!----
|
|
add #2, r1
|
|
cmp/eq r1, r2
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
cmp/eq r3, r0
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
|
|
/**************
|
|
MOV.B @Rm+, Rn
|
|
**************/
|
|
_movbarpr:
|
|
mov.l _pram0, r1
|
|
mov #0xaa, r0
|
|
mov.b r0, @r1
|
|
!----
|
|
mov r1, r2
|
|
mov.b @r2+, r3
|
|
!----
|
|
add #1, r1
|
|
cmp/eq r1, r2
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
cmp/eq r3, r0
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
|
|
/**************
|
|
MOV.L @Rm+, Rm
|
|
**************/
|
|
_movlarpr2:
|
|
mov.l _pram0, r1
|
|
mov.l _paabbccdd, r0
|
|
mov.l r0, @r1
|
|
!----
|
|
mov.l @r1+, r1
|
|
!----
|
|
cmp/eq r1, r0
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
|
|
/**************
|
|
MOV.W @Rm+, Rm
|
|
**************/
|
|
_movwarpr2:
|
|
mov.l _pram0, r1
|
|
mov.w _paabb, r0
|
|
mov.w r0, @r1
|
|
!----
|
|
mov.w @r1+, r1
|
|
!----
|
|
cmp/eq r1, r0
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
|
|
/**************
|
|
MOV.B @Rm+, Rm
|
|
**************/
|
|
_movbarpr2:
|
|
mov.l _pram0, r1
|
|
mov #0xaa, r0
|
|
mov.b r0, @r1
|
|
!----
|
|
mov.b @r1+, r1
|
|
!----
|
|
cmp/eq r1, r0
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
|
|
/*****************
|
|
MOV.L/W/B @Rm, Rn
|
|
MOV.L/W/B Rm, @Rn
|
|
*****************/
|
|
_movlwb:
|
|
mov.l _pram0, r2
|
|
mov.l _p11223344, r1
|
|
mov.l r1, @r2
|
|
!----
|
|
mov.l _p11223344, r8
|
|
mov.l _p00001122, r9
|
|
mov.l _p00000011, r10
|
|
!----
|
|
mov.l @r2, r0
|
|
cmp/eq r0, r8
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.w @r2, r0
|
|
cmp/eq r0, r9
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.b @r2, r0
|
|
cmp/eq r0, r10
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.l _pram0, r0
|
|
mov #0xaa, r1
|
|
mov.b r1, @r0
|
|
add #1, r0
|
|
mov #0xbb, r1
|
|
mov.b r1, @r0
|
|
add #1, r0
|
|
mov.l _pccdd, r1
|
|
mov.w r1, @r0
|
|
!----
|
|
mov.l _paabbccdd, r8
|
|
mov.l _pffffaabb, r9
|
|
mov.l _pffffffaa, r10
|
|
!----
|
|
mov.l _pram0, r0
|
|
mov.l @r0, r2
|
|
cmp/eq r2, r8
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.w @r0, r3
|
|
cmp/eq r3, r9
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
mov.b @r0, r4
|
|
cmp/eq r4, r10
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
|
|
/*****************
|
|
CAS Rm, Rn, @R0
|
|
*****************/
|
|
_cas_r:
|
|
mov.l _pram0, r0
|
|
mov.l _p11223344, r1
|
|
mov.l _p00001122, r2
|
|
mov.l _p55aa55aa, r3
|
|
mov.l r1, @r0
|
|
!----
|
|
mov r1, r8
|
|
mov r2, r9
|
|
/* cas r8, r9, @r0 */
|
|
.word 0x02983
|
|
!---- check CAS succeeded
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!---- check r8 unchanged
|
|
cmp/eq r8, r1
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!---- check r9 was set to old @R0
|
|
cmp/eq r9, r1
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!---- check that @R0 was written
|
|
mov.l @r0, r4
|
|
cmp/eq r4, r2
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
|
|
mov.l r1, @r0
|
|
mov r3, r8
|
|
mov r2, r9
|
|
/* cas r8, r9, @r0 */
|
|
.word 0x02983
|
|
!---- check CAS failed
|
|
bf .+6
|
|
jmp @r13
|
|
nop
|
|
!---- check r8 unchanged
|
|
cmp/eq r8, r3
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!---- check r9 was set to old @R0
|
|
cmp/eq r9, r1
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!---- check that @R0 unchanged
|
|
mov.l @r0, r4
|
|
cmp/eq r4, r1
|
|
bt .+6
|
|
jmp @r13
|
|
nop
|
|
!----
|
|
|
|
/**************
|
|
Constant Table
|
|
**************/
|
|
bra _constantend
|
|
nop
|
|
.align 4
|
|
_pram0 : .long _ram0+128
|
|
_pram0_4 : .long _ram0+128+4
|
|
_pram0_12 : .long _ram0+128+16-4
|
|
_pram0_16 : .long _ram0+128+16
|
|
_p01234567: .long 0x01234567
|
|
_p89abcdef: .long 0x89abcdef
|
|
_p55aa55aa: .long 0x55aa55aa
|
|
_p11223344: .long 0x11223344
|
|
_p00001122: .long 0x00001122
|
|
_p00000011: .long 0x00000011
|
|
_paabbccdd: .long 0xaabbccdd
|
|
_pffffaabb: .long 0xffffaabb
|
|
_pffffffaa: .long 0xffffffaa
|
|
_pccdd : .long 0xffffccdd
|
|
_p000003f3: .long 0x000003f3
|
|
_p00010203: .long 0x00010203
|
|
_p04050607: .long 0x04050607
|
|
_paabb : .word 0xaabb
|
|
.align 2
|
|
_constantend:
|
|
|
|
/**************
|
|
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 0x00000021
|
|
|
|
/**********
|
|
You Failed
|
|
**********/
|
|
_fail:
|
|
mov.l _pfail_value, r0
|
|
mov.l _pfail_value, r1
|
|
bra _fail
|
|
nop
|
|
.align 4
|
|
_pfail_value: .long 0x88888888
|
|
|
|
.end
|