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/testshift.s
2019-03-03 19:35:20 -05:00

431 lines
7.0 KiB
ArmAsm

/**************
Initialization
**************/
.global _testshift
_testshift:
sts.l pr, @-r15
mov.l _pfail, r13 !fail address
bra _testgo
nop
_pfail: .long _fail
_testgo:
/************************
SHLL Rn
************************/
mov.l _ptestvalue, r1
!----
mov.l @r1+, r2 ! initial SR
ldc r2, sr
mov.l @r1+, r3 ! initial value
shll r3
mov.l @r1+, r4 ! result SR
mov.l @r1+, r5 ! result value
stc sr, r6
cmp/eq r3, r5
bt .+6
jmp @r13
nop
cmp/eq r4, r6
bt .+6
jmp @r13
nop
!----
mov.l @r1+, r2 ! initial SR
ldc r2, sr
mov.l @r1+, r3 ! initial value
shal r3
mov.l @r1+, r4 ! result SR
mov.l @r1+, r5 ! result value
stc sr, r6
cmp/eq r3, r5
bt .+6
jmp @r13
nop
cmp/eq r4, r6
bt .+6
jmp @r13
nop
!----
mov.l @r1+, r2 ! initial SR
ldc r2, sr
mov.l @r1+, r3 ! initial value
shlr r3
mov.l @r1+, r4 ! result SR
mov.l @r1+, r5 ! result value
stc sr, r6
cmp/eq r3, r5
bt .+6
jmp @r13
nop
cmp/eq r4, r6
bt .+6
jmp @r13
nop
!----
mov.l @r1+, r2 ! initial SR
ldc r2, sr
mov.l @r1+, r3 ! initial value
shar r3
mov.l @r1+, r4 ! result SR
mov.l @r1+, r5 ! result value
stc sr, r6
cmp/eq r3, r5
bt .+6
jmp @r13
nop
cmp/eq r4, r6
bt .+6
jmp @r13
nop
!----
mov.l @r1+, r2 ! initial SR
ldc r2, sr
mov.l @r1+, r3 ! initial value
rotl r3
mov.l @r1+, r4 ! result SR
mov.l @r1+, r5 ! result value
stc sr, r6
cmp/eq r3, r5
bt .+6
jmp @r13
nop
cmp/eq r4, r6
bt .+6
jmp @r13
nop
!----
mov.l @r1+, r2 ! initial SR
ldc r2, sr
mov.l @r1+, r3 ! initial value
rotcl r3
mov.l @r1+, r4 ! result SR
mov.l @r1+, r5 ! result value
stc sr, r6
cmp/eq r3, r5
bt .+6
jmp @r13
nop
cmp/eq r4, r6
bt .+6
jmp @r13
nop
!----
mov.l @r1+, r2 ! initial SR
ldc r2, sr
mov.l @r1+, r3 ! initial value
rotr r3
mov.l @r1+, r4 ! result SR
mov.l @r1+, r5 ! result value
stc sr, r6
cmp/eq r3, r5
bt .+6
jmp @r13
nop
cmp/eq r4, r6
bt .+6
jmp @r13
nop
!----
mov.l @r1+, r2 ! initial SR
ldc r2, sr
mov.l @r1+, r3 ! initial value
rotcr r3
mov.l @r1+, r4 ! result SR
mov.l @r1+, r5 ! result value
stc sr, r6
cmp/eq r3, r5
bt .+6
jmp @r13
nop
cmp/eq r4, r6
bt .+6
jmp @r13
nop
!----
mov.l @r1+, r2 ! initial SR
ldc r2, sr
mov.l @r1+, r3 ! initial value
shll2 r3
mov.l @r1+, r4 ! result SR
mov.l @r1+, r5 ! result value
stc sr, r6
cmp/eq r3, r5
bt .+6
jmp @r13
nop
cmp/eq r4, r6
bt .+6
jmp @r13
nop
!----
mov.l @r1+, r2 ! initial SR
ldc r2, sr
mov.l @r1+, r3 ! initial value
shll8 r3
mov.l @r1+, r4 ! result SR
mov.l @r1+, r5 ! result value
stc sr, r6
cmp/eq r3, r5
bt .+6
jmp @r13
nop
cmp/eq r4, r6
bt .+6
jmp @r13
nop
!----
mov.l @r1+, r2 ! initial SR
ldc r2, sr
mov.l @r1+, r3 ! initial value
shll16 r3
mov.l @r1+, r4 ! result SR
mov.l @r1+, r5 ! result value
stc sr, r6
cmp/eq r3, r5
bt .+6
jmp @r13
nop
cmp/eq r4, r6
bt .+6
jmp @r13
nop
!----
mov.l @r1+, r2 ! initial SR
ldc r2, sr
mov.l @r1+, r3 ! initial value
shlr2 r3
mov.l @r1+, r4 ! result SR
mov.l @r1+, r5 ! result value
stc sr, r6
cmp/eq r3, r5
bt .+6
jmp @r13
nop
cmp/eq r4, r6
bt .+6
jmp @r13
nop
!----
mov.l @r1+, r2 ! initial SR
ldc r2, sr
mov.l @r1+, r3 ! initial value
shlr8 r3
mov.l @r1+, r4 ! result SR
mov.l @r1+, r5 ! result value
stc sr, r6
cmp/eq r3, r5
bt .+6
jmp @r13
nop
cmp/eq r4, r6
bt .+6
jmp @r13
nop
!----
mov.l @r1+, r2 ! initial SR
ldc r2, sr
mov.l @r1+, r3 ! initial value
shlr16 r3
mov.l @r1+, r4 ! result SR
mov.l @r1+, r5 ! result value
stc sr, r6
cmp/eq r3, r5
bt .+6
jmp @r13
nop
cmp/eq r4, r6
bt .+6
jmp @r13
nop
mov.l _ppass_value, r3
mov.l _ppass_addr, r4
mov.l r3, @r4
! Unlike other shifter instructions, SHAD and SHLD do not read or
! write the T bit. Instead of storing the initial and expected SR
! values in the test case, the following tests initialize SR to 0
! and compare against 0, using R0=0.
mov #0, r0
!---- SHLD
.rept 4
mov.l @r1+, r2 ! initial value A
mov.l @r1+, r3 ! initial value B
ldc r0, sr
shld r3, r2
stc sr, r0
mov.l @r1+, r5 ! result value
cmp/eq r2, r5
bt .+6
jmp @r13
nop
cmp/eq #0, r0
bt .+6
jmp @r13
nop
.endr
!----- SHAD
.rept 6
mov.l @r1+, r2 ! initial value A
mov.l @r1+, r3 ! initial value B
ldc r0, sr
shad r3, r2
stc sr, r0
mov.l @r1+, r5 ! result value
cmp/eq r2, r5
bt .+6
jmp @r13
nop
cmp/eq #0, r0
bt .+6
jmp @r13
nop
.endr
!----
bra _pass
nop
!----
.align 4
_ptestvalue: .long _testvalue
_testvalue :
!----SHLL
.long 0x00000000
.long 0xaaaaaaab ! 1010....1011
.long 0x00000001
.long 0x55555556 ! 0101....0110
!----SHAL
.long 0x00000001
.long 0x55555557 ! 0101....0111
.long 0x00000000
.long 0xaaaaaaae ! 1010....1110
!----SHLR
.long 0x00000001
.long 0xeaaaaaaa ! 1110....1010
.long 0x00000000
.long 0x75555555 ! 0111....0101
!----SHAR
.long 0x00000001
.long 0xaaaaaaaa ! 1010....1010
.long 0x00000000
.long 0xd5555555 ! 1101....0101
!----ROTL
.long 0x00000000
.long 0xaaaaaaab ! 1010....1011
.long 0x00000001
.long 0x55555557 ! 0101....0111
!----ROTCL
.long 0x00000000
.long 0xaaaaaaab ! 1010....1011
.long 0x00000001
.long 0x55555556 ! 0101....0110
!----ROTR
.long 0x00000000
.long 0xd5555555 ! 1101....0101
.long 0x00000001
.long 0xeaaaaaaa ! 1110....1010
!----ROTCR
.long 0x00000000
.long 0xd5555555 ! 1101....0101
.long 0x00000001
.long 0x6aaaaaaa ! 0110....1010
!----SHLL2
.long 0x00000001
.long 0x12345678
.long 0x00000001
.long 0x48d159e0
!----SHLL8
.long 0x00000001
.long 0x12345678
.long 0x00000001
.long 0x34567800
!----SHLL16
.long 0x00000001
.long 0x12345678
.long 0x00000001
.long 0x56780000
!----SHLR2
.long 0x00000000
.long 0x12345678
.long 0x00000000
.long 0x048d159e
!----SHLR8
.long 0x00000000
.long 0x12345678
.long 0x00000000
.long 0x00123456
!----SHLR16
.long 0x00000000
.long 0x12345678
.long 0x00000000
.long 0x00001234
!----SHLD
.long 0xa55a5aa5 ! A
.long 3 ! B
.long 0x2ad2d528 ! Y
.long 0xa55a5aa5
.long -21
.long 0x0000052a
.long 0xa55a5aa5
.long -32
.long 0
.long 0x255a5aa5
.long -32
.long 0
!----SHAD
.long 0x0aa5a55a ! A
.long 3 ! B
.long 0x552d2ad0 ! Y
.long 0x0aa5a55a
.long 4
.long 0xaa5a55a0
.long 0x5aa5a55a
.long -3
.long 0x0b54b4ab
.long 0xa55a5aa5
.long -10
.long 0xffe95696
.long 0xa55a5aa5
.long -32
.long -1
.long 0x255a5aa5
.long -32
.long 0
/**************
Congratulations
**************/
_pass:
lds.l @r15+, pr
mov.l _ppass2_value, r0
mov.l _ppass_addr, r1
mov.l r0, @r1
rts
nop
.align 4
_ppass_addr: .long 0xABCD0000
_ppass_value: .long 0x00000032
_ppass2_value: .long 0x00000033
/**********
You Failed
**********/
_fail:
mov.l _pfail_value, r0
mov.l _pfail_value, r1
bra _fail
nop
.align 4
_pfail_value: .long 0x88888888
.end