136 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
#
 | 
						|
    mes 2, EM_WSIZE, EM_PSIZE
 | 
						|
 | 
						|
/*
 | 
						|
 * Tests _dup_ and _dus_ by loading 20 bytes from _src_, then making
 | 
						|
 * and checking some duplicates.  The compilers might never _dup_ or
 | 
						|
 * _dus_ with large sizes, so the compilers might work even if this
 | 
						|
 * test fails.  You can cheat this test if _cms_ always pushes zero.
 | 
						|
 */
 | 
						|
 | 
						|
    exa src
 | 
						|
    exa size
 | 
						|
src
 | 
						|
    con 3593880729I4, 782166578I4, 4150666996I4, 2453272937I4, 3470523049I4
 | 
						|
size
 | 
						|
    con 20I2
 | 
						|
 | 
						|
    exp $check
 | 
						|
    exp $_m_a_i_n
 | 
						|
    pro $_m_a_i_n, 0
 | 
						|
 | 
						|
    /* Push 3 copies of src on stack. */
 | 
						|
    lae src
 | 
						|
    loi 20        /* 1st copy */
 | 
						|
    dup 20        /* 2nd copy */
 | 
						|
    lae size
 | 
						|
    loi 2
 | 
						|
    dus EM_WSIZE  /* 3rd copy */
 | 
						|
 | 
						|
    cal $check
 | 
						|
    cal $finished
 | 
						|
    end /* $_m_a_i_n */
 | 
						|
 | 
						|
    pro $check, 4 * EM_PSIZE + EM_WSIZE
 | 
						|
#define p1    (-1 * EM_PSIZE)
 | 
						|
#define p2    (-2 * EM_PSIZE)
 | 
						|
#define p3    (-3 * EM_PSIZE)
 | 
						|
#define p4    (-4 * EM_PSIZE)
 | 
						|
#define i     (p4 - EM_WSIZE)
 | 
						|
 | 
						|
    /* Set pointers to all 4 copies. */
 | 
						|
    lae src
 | 
						|
    lal p4
 | 
						|
    sti EM_PSIZE  /* p4 = src */
 | 
						|
    lal 0
 | 
						|
    lal p3
 | 
						|
    sti EM_PSIZE  /* p3 = 3rd copy */
 | 
						|
    lal 20
 | 
						|
    lal p2
 | 
						|
    sti EM_PSIZE  /* p2 = 2nd copy */
 | 
						|
    lal 40
 | 
						|
    lal p1
 | 
						|
    sti EM_PSIZE  /* p1 = 1st copy */
 | 
						|
 | 
						|
    /* Loop 20 times to verify each byte. */
 | 
						|
    loc 0
 | 
						|
    stl i
 | 
						|
4
 | 
						|
    lal p4
 | 
						|
    loi EM_PSIZE
 | 
						|
    loi 1         /* byte from src */
 | 
						|
    lal p3
 | 
						|
    loi EM_PSIZE
 | 
						|
    loi 1         /* byte from 3rd copy */
 | 
						|
    cms EM_WSIZE
 | 
						|
    zeq *3
 | 
						|
    loc (3 * 256)
 | 
						|
    lol i
 | 
						|
    adi EM_WSIZE  /* 0x300 + i */
 | 
						|
    loc EM_WSIZE
 | 
						|
    loc 4
 | 
						|
    cuu
 | 
						|
    cal $fail
 | 
						|
    asp 4
 | 
						|
3
 | 
						|
    lal p4
 | 
						|
    loi EM_PSIZE
 | 
						|
    loi 1         /* byte from src */
 | 
						|
    lal p2
 | 
						|
    loi EM_PSIZE
 | 
						|
    loi 1         /* byte from 2nd copy */
 | 
						|
    cms EM_WSIZE
 | 
						|
    zeq *2
 | 
						|
    loc (2 * 256)
 | 
						|
    lol i
 | 
						|
    adi EM_WSIZE  /* 0x200 + i */
 | 
						|
    loc EM_WSIZE
 | 
						|
    loc 4
 | 
						|
    cuu
 | 
						|
    cal $fail
 | 
						|
    asp 4
 | 
						|
2
 | 
						|
    lal p4
 | 
						|
    loi EM_PSIZE
 | 
						|
    loi 1         /* byte from src */
 | 
						|
    lal p1
 | 
						|
    loi EM_PSIZE
 | 
						|
    loi 1         /* byte from 1st copy */
 | 
						|
    cms EM_WSIZE
 | 
						|
    zeq *1
 | 
						|
    loc (1 * 256)
 | 
						|
    lol i
 | 
						|
    adi EM_WSIZE  /* 0x100 + i */
 | 
						|
    loc EM_WSIZE
 | 
						|
    loc 4
 | 
						|
    cuu
 | 
						|
    cal $fail
 | 
						|
    asp 4
 | 
						|
1
 | 
						|
    lal p4
 | 
						|
    loi EM_PSIZE
 | 
						|
    adp 1
 | 
						|
    lal p4
 | 
						|
    sti EM_PSIZE  /* increment p4 */
 | 
						|
    lal p3
 | 
						|
    loi EM_PSIZE
 | 
						|
    adp 1
 | 
						|
    lal p3
 | 
						|
    sti EM_PSIZE  /* increment p3 */
 | 
						|
    lal p2
 | 
						|
    loi EM_PSIZE
 | 
						|
    adp 1
 | 
						|
    lal p2
 | 
						|
    sti EM_PSIZE  /* increment p2 */
 | 
						|
    lal p1
 | 
						|
    loi EM_PSIZE
 | 
						|
    adp 1
 | 
						|
    lal p1
 | 
						|
    sti EM_PSIZE  /* increment p1 */
 | 
						|
    inl i
 | 
						|
    lol i
 | 
						|
    loc 20
 | 
						|
    blt *4        /* loop 20 times */
 | 
						|
 | 
						|
    ret 0
 | 
						|
    end /* $check */
 |