Added cms, and a test for it.

This commit is contained in:
David Given 2018-09-17 12:42:10 +01:00
parent 0b65591972
commit 1e073e944a
2 changed files with 110 additions and 0 deletions

35
mach/mips/libem/cms.s Normal file
View file

@ -0,0 +1,35 @@
#
.sect .text; .sect .rom; .sect .data; .sect .bss
/*
* Set comparison Returns 0 if the sets were equal.
* Stack: ( a b size -- a!=b )
*/
.sect .text
.define .cms
.cms:
lw r4, 0(sp) ! r4 = size; sp points at b-word
addu r5, sp, r4 ! r5 points at a-word
addu r6, r5, r4 ! r6 is final sp-word
srl r4, r4, 2 ! r4 = count of words
li r8, 1 ! result
1:
lw at, 4(r5) ! load a
lw r7, 4(sp) ! load b
bne at, r7, exit ! branch if not equal
nop
addiu r5, r5, 4
addiu sp, sp, 4
addiu r4, r4, -1
bne r4, zero, 1b
nop
li r8, 0 ! Update result.
exit:
mov sp, r6
sw r8, 0(sp)
jr ra
nop

75
tests/plat/core/cms_e.e Normal file
View file

@ -0,0 +1,75 @@
#
mes 2, EM_WSIZE, EM_PSIZE
exp $_m_a_i_n
pro $_m_a_i_n, 0
/* Compare equal word sets. */
word
rom EM_WSIZE
loc 1
loc 1
loe word /* to defeat constant folding */
cms
zeq *1
loc __LINE__
cal $fail
asp 4
1
/* Compare non-equal word sets. */
loc 1
loc 2
loe word /* to defeat constant folding */
cms
zne *2
loc __LINE__
cal $fail
asp 4
2
/* Compare equal triple-word sets. */
loc 1
loc 2
loc 3
loc 1
loc 2
loc 3
loe word /* to defeat constant folding */
loc 3
mli EM_WSIZE
cms
zeq *3
loc __LINE__
cal $fail
asp 4
3
/* Compare non-equal triple-word sets. */
loc 1
loc 2
loc 3
loc 1
loc 2
loc 4
loe word /* to defeat constant folding */
loc 3
mli EM_WSIZE
cms
zne *4
loc __LINE__
cal $fail
asp 4
4
cal $finished
end